list.add() 和 list.add(new ArrayList<>()) 的区别? [复制]

Posted

技术标签:

【中文标题】list.add() 和 list.add(new ArrayList<>()) 的区别? [复制]【英文标题】:difference on list.add() AND list.add(new ArrayList<>())? [duplicate] 【发布时间】:2018-02-06 08:12:00 【问题描述】:

以下代码:

List<List<Integer>> res = new ArrayList<>();
List<Integer> row = new ArrayList<>();

for (int i = 1; i <= 3; i++) 
  row.add(i);
  res.add(row);

分辨率:[[1,2,3],[1,2,3],[1,2,3]]

这样写的:

for (int i = 1; i <= 3; i++) 
  row.add(i);
  res.add(new ArrayList<>(row));

分辨率:[[1],[1,2],[1,2,3]]

【问题讨论】:

【参考方案1】:

在第一种情况下,您只创建了 2 个对象(称为 new 两次)。您已将第二个对象添加到前 3 次,导致第二个对象在第一个对象中出现 3 次。

在第二种情况下,您创建了 5 个对象:res、一个工作区 row,以及在 3 个不同的时间点生成的 row 的 3 个副本。 3个副本添加到res

【讨论】:

以上是关于list.add() 和 list.add(new ArrayList<>()) 的区别? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

List.Add 没有与 Parallel 和 async 完美添加

java list<object>如何去重

java:如何删掉list里面的重复的map?

C# Linq获取两个List或数组的差集交集

JAVA:如何删掉list里面重复的Map?

Linq中join & group join & left join 的用法