開始之前,我認爲這個問題有一個非常簡單的答案,我只是忽略了。我認爲手邊的問題還有更多的眼光能夠很快指出我的問題。如何從兩個獨立的ArrayList中刪除重複的對象?
我有兩個ArrayLists,我想比較並從它們中刪除重複項。第一個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;
}
}
創建因此,使用上面的例子,我想刪除所有重複。如果可能的話,我試圖將它保留在兩個ArrayLists中,但如果必須的話,我願意對其中一個ArrayLists進行深層克隆。
所以我希望得到的ArrayList
有在它下面的信息,一旦比較完成
這裏是代碼我已經把
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中刪除一個Person,否則我會得到不正確的結果。
所以我的問題是,有沒有一種簡單的方法來從兩個ArrayLists中刪除重複的元素?如果是這樣,我該怎麼做。
我意識到我可能深入克隆更新的ArrayList
,只是刪除那個對象,但我想知道是否有一種方法,而不必克隆它。
我也意識到我可以將所有元素填充到一個Set中,它會刪除重複項,但我想要將「刪除」和「新」Person對象分開。
我假設個人名單不會有重複,是正確的? – arshajii
@arshajii一旦完成比較,每個列表都不應包含兩者之間的重複。一個ArrayList將包含已刪除的Person,另一個ArrayList將只包含新的Person對象。 – WilliamShatner
我的意思是說,在任何事情都完成之前,這兩個名單。例如,你不能在'contactList'中有兩個'Bob',對嗎? – arshajii