java - Java中Collections中的Collection.add()方法和Collection.addAll()方法有什么区别

标签 java collections

我有两个 ArrayList(a1a2),如下所示:

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]

我的问题:

  1. 为什么 a2.addAll() 方法打印数据两次?
  2. addaddAll 之间的确切区别是什么?这两种方法都返回 boolean 值。

最佳答案

Why a2.addAll() method prints the data twice?

因为在上一行调用 add(a1) 后第一个副本已经存在。

What is the exact difference between add() and addAll()? Both the methods return boolean.

add 添加单个项目,而 addAll 逐一添加集合中的每个项目。最后,如果集合已被修改,这两种方法都会返回 true。在 ArrayList 的情况下,这是微不足道的,因为集合总是被修改,但其他集合,例如 Set,如果项目被修改,可能会返回 false添加的已经存在。

注意:部分混淆是因为您的列表是未类型化的,因​​此它们包含对象的混合:a1 混合字符串和数字,而 a2 混合字符串、数字和列表。为您的集合使用特定的通用类型可以防止这种混淆,方法是让您执行 addaddAll,但不能同时执行两者:

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/

相关文章:

java - 如何将模型从 ML Pipeline 保存到 S3 或 HDFS?

scala - 从 Scala 集合中提取 Option 的最简单方法

NHibernate 'Write Only' 集合,是否有这样的东西?

c# - 你把集合类放在哪里?

vb.net - VB.Net 中集合中对象的生命周期

Java:如何检查字段是否为 java.util.Collection 类型

java - 单击Button时,App崩溃(在两个类之间传递字符串。)

java - 尝试进行其他 Activity 时,我简单的 “counter app”崩溃了……为什么?

Java列表,按3组计算对象的非零属性

java - 如何设置编译器选项,使其拒绝该程序,使其无法静态确保正确性?