2013-01-13 43 views
2

我试图从一个arrayList中复制元素到另一个,我开始在我的应用程序中得到错误,我认为问题是我正在做浅拷贝。从一个ArrayList到另一个ArrayList的Java克隆项目?

如何将一个项目从一个阵列添加到另一个阵列中进行深度复制/克隆?

这是我是如何复制了元到现在:

public ArrayList<ResolveInfo> myAppsArr = new ArrayList(); 
public ArrayList<ResolveInfo> allAppsArr = new ArrayList(); 

    myAppsArr.add(allAppsArr.get(0)); 
+0

是的,那只是复制引用。 –

+1

你确定吗? *'我认为问题是我在做浅拷贝'*。您应该确保在开始制作深层复印件之前。 – MrSmith42

+0

您应该使用ResolveInfo类的复制构造函数 – erhun

回答

3

如何从一个阵列中添加项目到另一个做深拷贝/克隆?

ResolveInfo有constructor,为您创建新的复制对象:

myAppsArr.add(new ResolveInfo(allAppsArr.get(0))); 

它出现在API 17只加入这个构造,可以尝试通用的克隆方法:

myAppsArr.add(allAppsArr.get(0).clone()); // No promises, I haven't tested this myself 

或者您可以创建一个手动创建一个新的Resolve因为所有成员数据都是公开的,所以Info对象。

2

对所有android版本执行此操作的最简单也是最可靠的方法是将ResolveInfo序列化为parcel,并从该parcel创建新的ResolveInfo实例。

ResolveInfo r1 = new ResolveInfo(); 
Parcel p = Parcel.obtain(); 
r1.writeToParcel(p, 0); 
ResolveInfo r2 = ResolveInfo.CREATOR.createFromParcel(p);