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

时间:2016-04-06 21:21:31

标签: java arraylist

我有两个ArrayLists,

ArrayList<Item> array1 = new ArrayList<>();
// and
ArrayList<Item> array2 = new ArrayList<>();
在Item类中的

我也有默认的boolean check = false;

我检查,在我清理array2.clear()并从array1添加到array2之前需要一个:

array2.clear();
for (Item i : array1) {
        if (.....) {
                array2.add(i);
        }
}

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

2 个答案:

答案 0 :(得分:6)

您要将同一个对象添加到两个ArrayList中。如果要分隔对象,请创建项的新实例并将其添加到array2。在创建public class Item { boolean check = false; //Other members //Copy constructor public Item(Item itemToCopy) { check = itemToCopy.check; // set other members } } 时,您将需要一个构造函数,该构造函数接受所有成员的值并将其设置为新对象。或者您可以获取Item对象并在构造函数中设置值。

项目类:

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

主要部分:

    var url = 'contact-form-handler.php';
    vm.codeStatus = "";
    vm.form = {};

    vm.submit = function($event) {

        // $event.preventDefault();
        console.log($.param(vm.form));

        $http({
            method: "POST",
            url: url,
            data: $.param(vm.form),
            headers: {'Content-Type': 'application/x-www-form-urlencoded'}
        }).
        success(function(result) {
            console.log(result);

        }).
        error(function(data) {
            console.log('not sent');
        });
        return false;

    };



}]);

答案 1 :(得分:1)

您正在将array1的元素添加到array2中 - 因此两个数组都引用了相同的Item。您必须将项目的副本添加到array2,而不是项目本身。