【Java编程锦囊·连载01】数组与ArrayList有区别吗?

问题阐述

上课时,老师经常说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语言编程锦囊】,可能你还想知道:

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180127B05BEA00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券