(53条消息) ArrayList的add方法,浅拷贝_oxygen-hhh的博客-CSDN博客
描述:
//接收大集合参数,返回小集合结果
public static ArrayList<List<String>> smallList(List<String> bigList){
//创建小集合存储偶数
List<String> smallList = new ArrayList<>();
ArrayList<List<String>> newList = new ArrayList<>();
for (String s : bigList) {
smallList.add(s);
if (smallList.size() == 2) {
newList.add(new ArrayList<>(smallList));
smallList.clear();
}
}
return newList;
}
合并偶数集合,在List集合当中继续插入list,size>2时候清空小的集合。会把大集合全部数据清空。
原因:List的add方法,每次add的时候是吧对象的地址add到数组最后,而没有新创建对象,所以每次add以后指向的都是小的list的地址,当小list的值发生改变时侯,就会影响到大的List的值。
解决方案:浅拷贝,构造另一个引用。
-
延申:浅拷贝和深拷贝
-
浅拷贝:如果是基本数据类型,只拷贝值(地址不变),引用类型(地址改变),拷贝一份引用类型
-
深拷贝:无论拷贝对象是引用类型还是基本类型,都做一份拷贝,拷贝对象的地址改变。
-