java中一个List赋值给另外一个List,并且利用Collections.reserve进行反转的结果
记录一下遇到的小坑
//初始化
List<int> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
List<int> a = new ArrayList<>();
//赋值
a = list;
Collections.reverse(a);
//输出结果
for(int i : list){
System.out.print(i);
}
System.out.println("");
for(int i : a){
System.out.print(i);
}
输出结果:
4321
4321
在debug时发现,list和a的地址引用是相同的,实际上List在进行赋值时是将地址进行赋值,由于上述代码中list,a两个个List的地址引用是一样的,因此在利用Collections.reverse()进行反转列表时,list,a两个个列表会被同时进行反转,因此输出的是一样的结果
解决这个问题的方式就是在赋值时,利用for循环进行赋值。
//将上述a = list修改为for循环进行赋值
for(int num : list){
a.add(num);
}
此时利用Collections.reverse()进行反转则会输出正确的结果。