2016-05-18 8 views
0

私はカスタムオブジェクトを含むArrayListを持っています。最初のリストと同じオブジェクトを含む新しいArrayListを作成しますか?

全く同じコンテンツを持ちますが、同じ参照を使用していない別のArrayListを作成する最適な方法は何ですか?リスト1の最初のオブジェクトを編集すると、list2の最初のオブジェクトには触れませんが、それ以外の場合は同じように見えます。

次の操作を行うのは正しい/適切な方法であると考えられますか、それとも組み込みの方法ですか?

List<MyObject> firstList = getArrayListFromSQLiteDb(criteria); 
List<MyObject> secondList = new ArrayList<>(); 

for (MyObject object : firstList) { 
    MyObject newObject = new MyObject(); 
    newObject.setField1(object.getField1()); 
    newObject.setField2(object.getField2()); 
    newObject.setField3(object.getField3()); 
    secondList.add(newObject); 
} 
+0

あなたの行っていることはちょうど良いことです。しかし、注意してください。いずれかのフィールドが参照の場合、それらはコピーされ、それはあなたが望むものではないように聞こえるでしょう。 –

+1

リスト firstList = getArrayListFromSQLiteDb(条件);リスト secondList = new ArrayList (firstList); –

+0

@ManuAG onkeyの場合は、[documentation](https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html)を参照してください。 –

答えて

4

これを行う簡単な方法は、このように参照を共有し、他のリストを持っていない、オリジナルのArrayListのクローンを作成することですあなたがオリジナルのものを変更したときにそのまま残ります。 @ 911DidBushが述べたように、これはリストの内容が複製可能で、clone()メソッドを正しく実装している場合にのみ機能します。

List<MyObject> firstList = getArrayListFromSQLiteDb(criteria); 
List<MyObject> secondList = new ArrayList<>(); 

for(MyObject obj : firstList) { 
    secondList.add(obj.clone()); 
} 
+0

リストの内容が複製可能で、clone()メソッドが正しく実装されている場合にのみ有効であることにも言及してください。それ以外の場合は、CloneNotSupportedExceptionが返されます。 –

関連する問題