ArrayList.addAll(list)与用于内容复制的新ArrayList <>(list)之间的区别

时间:2019-01-26 18:17:51

标签: java

我知道list2.addAll(list1)允许我们在调用此方法之前,如果list2已经有一些对象,则将附加对象从list1附加到list2

但是我什么也没加,我想知道下一种情况的区别

使用下一种方法制作列表副本时会有什么区别

例如,我有一些对象的列表(list1),我想对其进行复制,将其内容复制到另一个列表(到新列表-list2

List<Foo> list1 = new ArrayList<>();
list1.add(new Foo());
...

方法1

List<Foo> list2 = new ArrayList<>(list1);

方法2

List<Foo> list2 = new ArrayList<>();
list2.addAll(list1);

更新

实际上,甚至IntelliJ IDEA都建议我将方法2转换为方法1:

enter image description here

1 个答案:

答案 0 :(得分:5)

是的,我认为方法2会有点效率低 t,我的观点是:

执行此操作时:

List<Object> list2 = new ArrayList<Object>(list1);

ArrayList已经知道它需要分配给内存的大小,它是list1中Object的计数。

在方法2中,它会创建一个具有默认大小的 list2对象。当您执行添加操作时,它会自我更新。因为这将是额外的操作。