创建一个包含与第一个列表相同的对象的新ArrayList?

时间:2016-05-18 15:26:44

标签: java object arraylist copy

我有一个包含自定义对象的ArrayList。

制作具有完全相同内容的单独ArrayList的最佳方法是什么,但是不使用相同的引用?如同,如果我编辑list1中的第一个对象,它不会触及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);
}

1 个答案:

答案 0 :(得分:4)

执行此操作的一种简单方法是克隆原始ArrayList,因此在更改原始ArrayList时不会共享引用并保持其他列表保持不变。正如@ 911DidBush所提到的,这只有在列表内容可克隆并正确实现clone()方法时才有效。

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

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