ArrayList两个对象之间的赋值

ArrayList list  = new ArrayList();
// 第一次扩容
for (int i = 0; i < 10; i++) {
      list.add(i);
}
ArrayList list1  = list;
 for (int i = 0; i < 5; i++) {
      list1.add(i);
}
System.out.println(list.toString());
System.out.println(list1.toString());
System.out.println(list.equals(list1));

输出结果:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4]
true

发现list1和list输出的内容是一样的,这种方法只是将list的地址赋值给list1,他们都是操作同一块地址,相当于list。

而希望的赋值时把值传给list1,这个ArrayList和之前list完全是两个不同(分别指向不同的地址),正确的做法:

List <String> list1 = new ArrayList<String>();
//方法一:利用集合自带的构造方法
List<String> list2= new ArrayList<String>(list1);
//方法二:利用克隆的方法进行赋值
List<String> list2 =(ArrayList<String>) list1.clone();
上一篇:操作 Java 泛型(三):泛型在继承方面体现与通配符使用


下一篇:使用lambda表达式对两个list并集、去重并集、交集、差集处理