浅克隆:将新集合每个元素的引用指向原集合对应对象在栈空间的内存地址,所以,原集合修改或删除,克隆的集合随之改变;新集合修改添加会改变引用重新指向其他堆内存地址,删除就直接删除引用。
深克隆:将新集合的元素对象复制,在堆内存中重新开辟空间存一样的内容,一般要对集合中的对象重写clone(),在clone()中返回new的新对象,再add到新集合中,所以新旧集合操作互不影响。
以下为测试代码:
方法多测试看效果,每次只是用部分方法,注释部分方法看起更清晰
ArrayList<Integer> easyList = new ArrayList<Integer>();
easyList.add(new Integer(1));
easyList.add(new Integer(2));
easyList.add(new Integer(3));
//浅克隆,移除克隆集合原集合不变
ArrayList<Integer> clonelist = (ArrayList<Integer>) easyList.clone();
//移除现集合,原集合不变
//clonelist.remove(easyList.size()-1);
//移除原集合,现集合改变
easyList.remove(1);
//新集合修改不影响原集合
//clonelist.set(0, 99);
sop("浅克隆原集合"+easyList);
sop("浅克隆现集合"+clonelist);
//深克隆,克隆集合中对象,对象要重写clone()
ArrayList<listCloneDemo> deep