2017-02-03 5 views
0

私はすべての方法を試みましたが、いつも前のものを参照しています。最初にrefrencingせずにarrayListを別のArrayListにコピーする方法は?

mListPreviousData = new ArrayList<>(); 
for (int i = 0; i < mAddedList.size(); i++) { 
    mListPreviousData.add(mAddedList.get(i)); 
} 
+0

がちょうど(mListPreviousData =(ArrayListの)mAddedList.cloneを行います)。あなたはあなたのarraylist型にキャストする必要があります –

+1

両方のarrayListの型は同じですので前のものを参照しています – UserSharma

+0

[this](https://github.com/google/guava)ライブラリまたはコンストラクタを使用することができます**浅い**コピーを取得します。 – DwlRathod

答えて

1

あなたは、基礎となるオブジェクトのディープコピーを作成する必要があります。

mListPreviousData = new ArrayList<>(); 
for (int i = 0; i < mAddedList.size(); i++) { 
    mListPreviousData.add(mAddedList.get(i).clone()); 
} 

好ましくは、あなた自身のclone()メソッドを実装します。

編集:

全体のArrayListの深いコピーを実行します。

mListPreviousData = (..cast to your type..) mAddedList.clone(); 
+0

欠点オリジナルのリストデータが変更された場合、複製されたコピーは自動的に更新されます –

+0

私は2つの別々のリストが必要ではないと同じことです。 – UserSharma

+0

リストオブジェクトを複製して2つの別々のリストを作成したくない場合は、データリストアイテムを作成する必要があります。ループ内で毎回mListPreviousDataリストに追加します。毎回新しいオブジェクトを作成する必要があります。 –

0
mListPreviousData = new ArrayList<>(); 
mListPreviousData.addAll(mAddedList); 
+0

理解を深めてください。 – W4R10CK

関連する問題