天天看點

Java去除LIst中重複元素

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方法。

繼續閱讀