在java中去除list集合中的重复元素很常见,这里总结一下几种方法。
1、使用for循环list中的所有元素然后删除重复
/** * 使用for循环删除list中的重复元素 * @param list * @return */ public static List removeDuplicate1(List list) { for (int i = 0; i < list.size() - 1; i++) { for (int j = list.size() - 1; j > i; j--) { if (list.get(j).equals(list.get(i))) { list.remove(j); } } } return list; }
2.使用HashSet删除重复元素
/** * 使用HashSet删除重复元素 * @param list * @return */ public static List removeDuplicate2(List list) { HashSet h = new HashSet(list); list.clear(); list.addAll(h); return list; }
3.使用迭代器删除list中的重复元素
/** * 使用迭代器删除list中的重复元素 */ public static void removeDuplicateWithOrder3(List list) { Set set = new HashSet(); List newList = new ArrayList(); for (Iterator iter = list.iterator(); iter.hasNext(); ) { Object element = iter.next(); if (set.add(element)) newList.add(element); } list.clear(); list.addAll(newList); System.out.println(" remove duplicate " + list); }
4.把list里的对象遍历一遍,用list.contains(),如果不存在就放入到另外一个list集合中
/** * 把list里的对象遍历一遍,用list.contains(),如果不存在就放入到另外一个list集合中 * @param list * @return */ public static List removeDuplicate4(List list) { List listTemp = new ArrayList(); for (int i = 0; i < list.size(); i++) { if (!listTemp.contains(list.get(i))) { listTemp.add(list.get(i)); } } return listTemp; }
5.//用JDK1.8 Stream中对List进行去重:list.stream().distinct()
List list = (List) a.stream().distinct().collect(Collectors.toList()); System.out.println(list);
测试代码如下:
public static void main(String[] args) { List<String> a = new ArrayList<>(); a.add("1"); a.add("2"); a.add("3"); List<String> b = new ArrayList<>(); b.add("1"); b.add("3"); b.add("2"); a.addAll(b); //用JDK1.8 Stream中对List进行去重:list.stream().distinct() List list = (List) a.stream().distinct().collect(Collectors.toList()); System.out.println(list); System.out.println(removeDuplicate1(list)); System.out.println(removeDuplicate2(list)); removeDuplicateWithOrder3(list); System.out.println(removeDuplicate4(list)); }
运行结果如下图所示: