问题阐述
上课时,老师经常说ArrayList是数组的替代品,两者真的没有区别吗?
专家解答
有些集合类使用数组作为支撑,例如ArrayList,它在随机查找时性能较好。此外,数组与集合类都使用整序数来标示其中的元素。但是,集合类并不是数组的简单替代。
为了彻底弄清两者的区别,读者需要弄清顺序与位置的区别。对于集合类而言,它保存的是各个项被放入集合中的顺序。因此,如果从集合类中删除元素,元素的位置会有变化。
下面的程序演示了从列表中移除第2个和第3个元素的常见错误方法,代码如下。
public class WrongRemove{
public static void main(String[] args) {
List list = newArrayList(); //创建列表
for (int i = 0; i
list.add(i); //向列表中增加元素
}
System.out.println("移除元素之前当前列表中的元素:" + list.toString());
list.remove(1); //移除列表中第2个元素
System.out.println("移除第二个元素后列表中的元素:" + list.toString());
list.remove(2); //移除列表中第3个元素
System.out.println("移除第三个元素后列表中的元素:" + list.toString());
}
}
程序的运行效果如图9.2所示。
图9.2 错误的删除列表中元素
在图9.2中,移除列表中第2个和第3个元素后,正确结果应该是[0,3,4],显然与程序运行结果不符。这是因为每次移除元素后,元素的位置就发生了改变:后面的元素都被提前了。
下面的程序演示了从列表中移除第2个和第3个元素的正确方法,代码如下。
public class RightRemove{
public static void main(String[] args) {
List list = newArrayList(); //创建列表
for (int i = 0; i
list.add(i); //向列表中增加元素
}
System.out.println("移除元素之前当前列表中的元素:" + list.toString());
list.remove(1); //移除列表中第2个元素
System.out.println("移除第二个元素后列表中的元素:" + list.toString());
list.remove(1); //移除列表中第3个元素
System.out.println("移除第三个元素后列表中的元素:" + list.toString());
}
}
程序的运行效果如图9.3所示。
图9.3 正确的删除列表中元素
专家点评
当从列表中删除一个元素时,后面的元素会向前移动填充空位,这样再次删除是也应该注意序号。这点与数组明显不同。
关于【C语言编程锦囊】,可能你还想知道:
领取专属 10元无门槛券
私享最新 技术干货