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