简单看ArrayList中clone的深浅克隆

本文探讨了ArrayList在Java中的深浅克隆原理。浅克隆时,新集合元素引用指向原对象的栈空间地址,导致两者操作相互影响。而深克隆通过在堆内存中创建新对象,确保新旧集合独立。文中提供了测试代码以展示不同克隆方式的效果。
摘要由CSDN通过智能技术生成

 浅克隆:将新集合每个元素的引用指向原集合对应对象在栈空间的内存地址,所以,原集合修改或删除,克隆的集合随之改变;新集合修改添加会改变引用重新指向其他堆内存地址,删除就直接删除引用。

深克隆:将新集合的元素对象复制,在堆内存中重新开辟空间存一样的内容,一般要对集合中的对象重写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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值