arraylist = arraylist和arraylist.addAll(arraylist)之间的区别

Baw*_*awa 2 java

将arraylist分配给另一个并在两个arraylists之间使用方法addAll有什么区别?

1> arrayList = arrayList;//应该将后面的arrayList的值赋给第一个.

2> arrayList.addAll(arrayList)//将后面列表的所有数据添加到第一个.

第一个完全替换列表中的数据?第二个用于在列表中附加数据(如果已经有任何数据)???

如果我执行arrayList.add(arrayList)而不将任何数据分配给第一个列表,它会插入任何数据吗?

我做了以下代码测试,发现了我真的不知道的结果.

secondList.add("1");
secondList.add("2");

firstList = secondList;
Log.i("CHECK","first list =  "+ firstList);

firstList.addAll(secondList);
Log.i("CHECK","Firs list add : "+firstList);

firstList.clear();
firstList.addAll(secondList);
Log.i("CHECK","Firs list add 2 : "+firstList);
Run Code Online (Sandbox Code Playgroud)

结果是:

CHECK: first list =  [1, 2]
CHECK: Firs list add : [1, 2, 1, 2]
CHECK: Firs list add 2 : []
Run Code Online (Sandbox Code Playgroud)

我期待最后一个日志有如下结果: [1,2]

正如docs.oracle.com中提到的那样

addAll-将指定集合中的所有元素按指定集合的​​迭代器返回的顺序附加到此列表的末尾.

如果列表中没有数据?什么会添加所有DO?

Swe*_*per 7

当你这样做时:

firstList = secondList;
Run Code Online (Sandbox Code Playgroud)

你所说的实际上是"制作firstListsecondList引用相同的清单".执行该行后,只有一个列表,两个变量都引用该列表.

这就是为什么在你清除之后firstList,也secondList丢失了所有元素.他们指的是同一件事.这与此无关addAll.当你打电话时firstList.addAll(secondList),你基本上是在另一个空列表中添加一个空列表,这会产生一个空列表.