1 import java.util.*; 2 import java.util.stream.Collectors; 3 4 public class ListDistinct { 5 public static void main(String[] args) { 6 7 List<Integer> list1 = Arrays.asList(1, 2, 3, 3, 4, 2, 6, 3, 7, 6); 8 ArrayList<Integer> list = new ArrayList<>(list1); 9 10 List distinct = distinct3(list); 11 for (Object o : distinct) { 12 System.out.print(o + " "); 13 } 14 } 15 //双重循环遍历list,去除重复值 16 public static List distinct1(List list){ 17 for (int i = 0; i < list.size()-1; i++) {//每次拿第i个元素 18 for (int j = list.size()-1; j > i ; j--) {//从最后一个元素开始往前比较 19 if (list.get(j).equals(list.get(i))){//删除相同元素 20 list.remove(j); 21 } 22 } 23 } 24 return list; 25 } 26 27 //通过Set的不重复特性去除重复元素 28 public static List distinct2(List list){ 29 HashSet set = new HashSet<>(list); 30 list.clear();//删除之前所有元素 31 list.addAll(set);//搬运set中的所有元素 32 return list; 33 } 34 35 //去重顺序不乱 36 public static List distinct3(List list){ 37 HashSet set = new HashSet<>(); 38 List<Object> newList = new ArrayList<>(); 39 Iterator iterator = list.iterator();//用迭代器遍历 40 while (iterator.hasNext()){ 41 Object element = iterator.next(); 42 if (set.add(element)){//如果set添加了这个元素新列表也添加进去,set 的add()源码解释如下图 43 newList.add(element); 44 } 45 } 46 list.clear(); 47 list.addAll(newList); 48 49 return list; 50 } 51 //把list里的对象遍历一遍,用list.contains(),如果不存在就放入到另外一个list集合中 52 public static List distinct4(List list){ 53 List<Object> newList = new ArrayList<>(); 54 for (int i = 0; i < list.size()-1; i++) { 55 if (!newList.contains(list.get(i))){ 56 newList.add(list.get(i)); 57 } 58 } 59 list.clear(); 60 list.addAll(newList); 61 return list; 62 } 63 64 //用jdk1.8新特性stream 65 public static List distinct5(List list){ 66 return (List) list.stream().distinct().collect(Collectors.toList()); 67 68 } 69 70 }