Java克隆list

java中,除了基本数据类型和String之外,其他对象的赋值都是传递地址。

为了使对象可以传递值(不愿意改变源地址),需要使用到克隆。克隆又分为浅克隆和深克隆。浅克隆不能克隆对象,只能克隆基本的数据类型和String,所以如果我们的需要克隆的对象中包涵其他对象的引用,那么就需要使用深克隆。如下所示就是深度克隆:


public class ResGroup implements Cloneable {
    public String Color;// 眼色 (两种颜色 ,0 1)
    public String GroupId;// 一个分组的ID
    public String GroupName;// 分组的名称
    public String GroupCount;// 分组控件的数量
    public List<GroupItem> GroupItems = new ArrayList<GroupItem>();// 分组控件

    @Override
    public String toString() {
	return "ResGroup [Color=" + Color + ", GroupId=" + GroupId + ", GroupName=" + GroupName + ", Spans=" + Spans + ", Icon=" + Icon + ", GroupCount=" + GroupCount + ", GroupItems=" + GroupItems + "]";
    }

    public ResGroup clone() {
	ResGroup mResGroup=null;
	try {
	    mResGroup=(ResGroup)super.clone();
	    mResGroup.GroupItems=new ArrayList<GroupItem>();
	    for(GroupItem item:GroupItems){
		 mResGroup.GroupItems.add(item.clone());
	    }
	} catch (CloneNotSupportedException e) {
	    // TODO Auto-generated catch block
	    e.printStackTrace();
	}
	return mResGroup;
    }
}

public class GroupItem  implements Cloneable{
	public String DevMacId;
	public String DevType;//switch
	public String KeyNumber; //按键号
	public String BindingIcon;
	@Override
	public String toString() {
		return "GroupItem [DevMacId=" + DevMacId + ", DevType=" + DevType
				+ ", KeyNumber=" + KeyNumber + ", BindingIcon=" + BindingIcon
				+ "]";
	}
	public GroupItem clone(){
	    GroupItem item=null;
	    try {
		item=(GroupItem) super.clone();
	    } catch (CloneNotSupportedException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	    }
	    return item;
	}
}




最后,还可使使用序列化的流来实现深克隆。

http://cst.is-programmer.com/posts/20599.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值