Java中的List是有序,而且允許重複的,但有時候我們卻不希望它存在重複的元素,那麼有什麼辦法可以去除List裡面重複的元素呢?
本文提供三種方法去除重複元素:
/**
* 删除ArrayList中重複元素
* @author jimzhang
*/
public class DuplicateRemoval<E> {
@SuppressWarnings("unchecked")
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("c");
list.add("a");
list.add("a");
list.add("c");
new DuplicateRemoval().removeDuplicate3(list);
}
/**
* 循環剔除重複元素
* @param list
*/
public void removeDuplicate1(List<E> list) {
for (int i = 0; i < list.size() - 1; i++) { // i從第一個開始周遊
for (int j = list.size() - 1; j > i; j--) { // j從最後一個開始周遊
if (list.get(j).equals(list.get(i))) {
list.remove(j);
}
}
}
System.out.println(list);
}
/**
* 通過HashSet剔除(無序)
* @param list
*/
public void removeDuplicate2(List<E> list) {
Set<E> set = new HashSet<E>(list); // 通過HashSet去重複
list.clear(); // 清空原有list
list.addAll(set);
System.out.println(list);
}
/**
* 通過HashSet剔除(有序)
* @param list
*/
public void removeDuplicate3(List<E> list) {
Set<E> set = new HashSet<E>();
List<E> newList = new ArrayList<E>(); // 建立一個list維持順序
for (int i = 0; i < list.size(); i++) {
E obj = list.get(i);
if (set.add(obj)){
newList.add(obj);
}
}
list.clear();
list.addAll(newList);
System.out.println(list);
}
}
注:如果是對象需要用HashSet去重,則要将對象實作equals和hashCode方法。