我有两个 ArrayList
(a1
和 a2
),如下所示:
ArrayList a1 = new ArrayList();
a1.add(8);
a1.add("a1");
ArrayList a2 = new ArrayList();
a2.add(a1); //output : [[8, a1]]
a2.addAll(a1); //output : [[8, a1], 8, a1]
我的问题:
- 为什么
a2.addAll()
方法打印数据两次? add
和addAll
之间的确切区别是什么?这两种方法都返回 boolean 值。
最佳答案
Why
a2.addAll()
method prints the data twice?
因为在上一行调用 add(a1)
后第一个副本已经存在。
What is the exact difference between
add()
andaddAll()
? Both the methods returnboolean
.
add
添加单个项目,而 addAll
逐一添加集合中的每个项目。最后,如果集合已被修改,这两种方法都会返回 true
。在 ArrayList
的情况下,这是微不足道的,因为集合总是被修改,但其他集合,例如 Set
,如果项目被修改,可能会返回 false
添加的已经存在。
注意:部分混淆是因为您的列表是未类型化的,因此它们包含对象的混合:a1
混合字符串和数字,而 a2
混合字符串、数字和列表。为您的集合使用特定的通用类型可以防止这种混淆,方法是让您执行 add
或 addAll
,但不能同时执行两者:
List<String> a1 = new ArrayList<>();
a1.add("8");
a1.add("a1");
List<List<String>> a2 = new ArrayList<>();
a2.add(a1);
a2.addAll(a1); // <<== Does not compile
List<String> a3 = new ArrayList<>();
a3.add(a1); // <<== Does not compile
a3.addAll(a1);
关于java - Java中Collections中的Collection.add()方法和Collection.addAll()方法有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45529949/