如何使两个ArrayList有单独的变化?

Edd*_*Edd -1 java arraylist

我有两个ArrayLists,

ArrayList<Item> array1 = new ArrayList<>();
// and
ArrayList<Item> array2 = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)

在Item类中我也有默认值 boolean check = false;

我检查,在清理所有内容之前array2.clear(),需要从array1添加到array2:

array2.clear();
for (Item i : array1) {
        if (.....) {
                array2.add(i);
        }
}
Run Code Online (Sandbox Code Playgroud)

如果在array2 boolean check中更改falsetrue,则在array1中也会更改它.如何将它们分开,以便下次向array2添加元素时,布尔检查不会复制为true

Jos*_* K. 6

您将相同的对象添加到两个ArrayList.如果要分隔对象,请创建项的新实例并将其添加到array2.在创建时,Item您将需要一个构造函数,该构造函数接受所有成员的值并将其设置为新对象.或者您可以获取Item对象并在构造函数中设置值.

物品类:

public class Item {

    boolean check = false;    
    //Other members 

    //Copy constructor
    public Item(Item itemToCopy) {
        check = itemToCopy.check;
        // set other members
    }
}
Run Code Online (Sandbox Code Playgroud)

主要部分:

array2.clear();
for (Item i : array1) {
     if (.....) {
           //Use copy constructor
           Item newItem = new Item(i)); 
           array2.add(newItem);
     }
}
Run Code Online (Sandbox Code Playgroud)

  • 不,`new Item(i.check/*转移其他成员的值*/)`不是复制构造函数.复制构造函数是一个带有单个参数的构造函数,与类本身的类型相同,即`new Item(i)`将调用复制构造函数. (2认同)