public static ArrayList getSingle(ArrayList list) {
ArrayList tempList = new ArrayList();
Iterator it = list.iterator();
while (it.hasNext()) {
Object obj = it.next();
if (!tempList.contains(obj)) {
tempList.add(obj);
}
}
return tempList;
}
原理:遍歷舊集合,若新集合不包含該元素則加入。contains 底層依賴 equals 方法,String、Integer 等已正確覆寫 equals,故可直接使用。
public class Person {
private String name;
private int age;
// 建構子、getter/setter 略
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (!(obj instanceof Person)) return false;
Person p = (Person) obj;
return this.name.equals(p.name) && this.age == p.age;
}
// 建議同時覆寫 hashCode
}
測試:
ArrayList list = new ArrayList();
list.add(new Person("張三", 23));
list.add(new Person("張三", 23));
list.add(new Person("李四", 24));
ArrayList newList = getSingle(list); // 重複的「張三,23」會被移除
contains、remove 皆依賴 equals,未覆寫時比較的是記憶體位址,無法正確去重。HashSet 或 Java 8 Stream distinct()。