2013-01-13 38 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);