Java克隆项从一个ArrayList到另一个?

时间:2013-01-13 20:11:41

标签: java android

我正在尝试将元素从一个arrayList复制到另一个arrayList中,我开始在我的应用程序中收到错误,我认为问题在于我正在做浅层复制。

如何将一个项目中的项目添加到另一个数组中进行深层复制/克隆?

这就是我到现在为止复制元素的方式:

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

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

2 个答案:

答案 0 :(得分: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

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

答案 1 :(得分:2)

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

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