天天看点

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

继续阅读