Trước khi bắt đầu, tôi nghĩ rằng câu hỏi này có một câu trả lời rất đơn giản mà tôi chỉ xem xét. Tôi đã tìm thêm một vài câu hỏi về vấn đề này sẽ có thể chỉ ra vấn đề của tôi khá nhanh.Làm cách nào để xóa các đối tượng trùng lặp khỏi hai ArrayLists riêng biệt?
Tôi có hai ArrayLists mà tôi muốn so sánh và xóa các từ khóa trùng lặp khỏi mỗi người trong số họ. ArrayList
đầu tiên là một thông tin cũ hơn ArrayList
trong đó ArrayList
thứ hai chứa thông tin mới.
Giống như rất
ArrayList<Person> contactList = new ArrayList();
contactList.add(new Person("Bob");
contactList.add(new Person("Jake");
contactList.add(new Person("Joe");
ontactList.add(new Person("Rob");
ArrayList<Person> updatedContactList = new ArrayList();
updatedContactList.add(new Person("Bob");
updatedContactList.add(new Person("Jake");
updatedContactList.add(new Person("Joe");
updatedContactList.add(new Person("Phil");
lớp Person
của tôi rất đơn giản, được tạo ra chỉ duy nhất cho ví dụ này
public class Person {
private String name;
public Person(String a_name) {
name = a_name;
}
public String getName() {
return name;
}
}
Vì vậy, sử dụng các ví dụ trên, tôi muốn loại bỏ tất cả các bản sao. Tôi đang cố gắng giữ nó chỉ là hai ArrayLists nếu có thể, nhưng tôi sẵn sàng làm một bản sao sâu của một trong những ArrayLists nếu tôi phải.
Vì vậy, tôi muốn kết quả ArrayList
để có các thông tin sau trong nó một lần so sánh được thực hiện
Dưới đây là đoạn code tôi đã đặt cùng
for(int i = 0; i < contactList.size(); i++) {
for(int j = 0; j < updatedContactList.size(); j++) {
if(contactList.get(i).getName().equals(updatedContactList.get(j).getName())) {
//removed friends
contactList.remove(contactList.get(i));
//new friends ---- only one at a time works
//updatedContactList.remove(updatedContactList.get(j));
}
}
}
Tôi chỉ có thể để loại bỏ một người khỏi một trong các ArrayLists trong vòng lặp ở trên nếu không tôi nhận được kết quả không chính xác.
Vì vậy, câu hỏi của tôi là, có cách nào dễ dàng để xóa các phần tử trùng lặp khỏi cả hai ArrayLists? Nếu vậy, làm thế nào để tôi đi về nó.
Tôi nhận ra rằng tôi có thể sao chép bản cập nhật ArrayList
và chỉ xóa các đối tượng khỏi đó, nhưng tôi tự hỏi liệu có cách nào không phải sao chép nó.
Tôi cũng nhận ra rằng tôi có thể nhồi nhét tất cả các phần tử vào một bộ và nó sẽ loại bỏ các bản sao, nhưng tôi muốn giữ riêng các đối tượng "đã loại bỏ" và "mới".
Tôi giả định rằng các danh sách riêng lẻ sẽ không có bản sao, đúng không? – arshajii
@arshajii Khi so sánh được thực hiện, mỗi danh sách sẽ không chứa bản sao giữa hai người trong số họ. Một ArrayList sẽ chứa 'Person' (s) bị loại bỏ và ArrayList khác sẽ chỉ chứa các đối tượng' Person' mới. – WilliamShatner
Tôi có nghĩa là trước khi tay, trước khi bất cứ điều gì được thực hiện cho hai danh sách. Bạn không thể, ví dụ, có hai 'Bob' trong 'contactList', phải không? – arshajii