我有两个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
?
答案 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,而不是项目本身。