我知道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:
答案 0 :(得分:5)
是的,我认为方法2会有点效率低 t,我的观点是:
执行此操作时:
List<Object> list2 = new ArrayList<Object>(list1);
ArrayList已经知道它需要分配给内存的大小,它是list1中Object的计数。
在方法2中,它会创建一个具有默认大小的 list2对象。当您执行添加操作时,它会自我更新。因为这将是额外的操作。