java map深拷贝_java Map深度复制问题

博客探讨了Java中对象复制的区别,强调了基础类型与引用类型在复制时的不同处理。对于引用类型的Map,需要进行深度复制以避免修改影响源对象。示例代码展示了如何实现一个元素类Elem的clone方法,特别注意对Map属性attr的处理,确保其值被正确复制。
摘要由CSDN通过智能技术生成

展开全部

这里的pos是基础类型,不是引用类型,不需要拿出来单独复制,浅clone就可e5a48de588b63231313335323631343130323136353331333332613737以了,但是attr这个map需要进行深度复制,因为这个是引用类型,复制后的对象修改该属性依然会影响源对象

clone方法可以简单写为@Override

protected Object clone() throws CloneNotSupportedException {

// TODO Auto-generated method stub

Elem elem = (Elem) super.clone();

Map tempMap = new HashMap();

for (Entry e : this.map.entrySet()) {

/**

* 这里的new String(e.getValue())可以直接用e.getValue()代替,

* 写在这里仅仅是提醒当value是其他对象时需要做下处理,比如一个User对象,如果你直接写成

* tempMap.put(e.getKey(), e.getValue());那么肯定是没什么用的,而要写成

* tempMap.put(e.getKey(), e.getValue().clone());

*/

tempMap.put(e.getKey(), new String(e.getValue()));

}

elem.map = tempMap;

return elem;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值