Java ArrayList.addAll(列表)和新ArrayList之间的差异<&燃气轮机;(列表)用于内容复制

Java ArrayList.addAll(列表)和新ArrayList之间的差异<&燃气轮机;(列表)用于内容复制,java,Java,我知道list2.addAll(list1)允许我们从list1向list2附加额外的对象,如果list2在调用此方法之前已经有一些对象 但我没有附加任何内容,我想知道下一个案例的区别 使用next方法复制列表时会有什么不同吗 例如,我有一些对象的列表(list1),我想复制它,将它的内容复制到另一个列表(到一个新列表-list2) List list1=new ArrayList(); 列表1.add(newfoo()); ... 方法1 List<Foo> list2 = ne

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

但我没有附加任何内容,我想知道下一个案例的区别

使用next方法复制列表时会有什么不同吗

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

List list1=new ArrayList();
列表1.add(newfoo());
...
方法1

List<Foo> list2 = new ArrayList<>(list1);
List list2=新的数组列表(list1);
方法2

List<Foo> list2 = new ArrayList<>();
list2.addAll(list1);
List list2=new ArrayList();
列表2.addAll(列表1);
更新

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


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

执行此操作时:

List<Object> list2 = new ArrayList<Object>(list1);
List list2=新的数组列表(list1);
ArrayList已经知道需要分配给内存的大小,该内存是列表1中对象的计数


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

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

执行此操作时:

List<Object> list2 = new ArrayList<Object>(list1);
List list2=新的数组列表(list1);
ArrayList已经知道需要分配给内存的大小,该内存是列表1中对象的计数


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

addAll
还执行一些大小检查(是否放大基础数组等)。
addAll
还执行一些大小检查(是否放大基础数组等)。