在开始之前,我认为这个问题有一个非常简单的答案,我只是忽略了。我想多看几眼手头的问题就能很快指出我的问题。
我有两个 ArrayList,我想比较它们并从中删除重复项。第一个ArrayList
是ArrayList
旧信息,而第二个ArrayList
包含新信息。
像这样
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");
我的Person
课很简单,只为这个例子创建
public class Person {
private String name;
public Person(String a_name) {
name = a_name;
}
public String getName() {
return name;
}
}
因此,使用上面的示例,我想删除所有重复项。如果可能的话,我试图将它保留在两个 ArrayList 中,但如果必须的话,我愿意对其中一个 ArrayList 进行深度克隆。
ArrayList
因此,一旦比较完成,我希望结果中包含以下信息
contactList //removed Person
- Rob
updatedContactList //new Person
- Phil
这是我放在一起的代码
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));
}
}
}
我只能从上述循环中的一个 ArrayLists 中删除一个人,否则我会得到不正确的结果。
所以我的问题是,有没有一种简单的方法可以从两个 ArrayLists 中删除重复的元素?如果是这样,我该怎么做。
我意识到我可能可以深度克隆更新ArrayList
的对象并从中删除对象,但我想知道是否有一种方法无需克隆它。
我也意识到我可以将所有元素填充到一个 Set 中,它会删除重复项,但我想将“已删除”和“新”Person 对象分开。