介绍四种不同的方法对 ArrayList 中的数据进行去重
-
1、使用 LinkedHashSet 对 List 去重
public class ListTest { public static void main(String[] args) { List<Integer> numList = new ArrayList<Integer>(Arrays.asList(1,1,1,2,3,3,3,4,5,5,6)); System.out.println(numList); LinkedHashSet<Integer> hashSet = new LinkedHashSet<Integer>(numList); List<Integer> resultList = new ArrayList<Integer>(hashSet); System.out.println(resultList); } } // 输出 [1, 1, 1, 2, 3, 3, 3, 4, 5, 5, 6] [1, 2, 3, 4, 5, 6]
-
2、使用 stream 进行 List 去重
使用 stream 的 distinct() 方法返回一个由不同数据组成的流,通过对象的equals() 方法进行比较。
public static void removeDuplicate() { List<Integer> numList = new ArrayList<Integer>(Arrays.asList(1,1,1,2,3,3,3,4,5,5,6)); System.out.println(numList); List<Integer> listWithoutDuplicates = numList.stream().distinct().collect(Collectors.toList()); System.out.println(listWithoutDuplicates); }
使用 stream 对对象的单个字段进行去重。
List<IdDto> idDtos = idDtoList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(IdDto::getId))), ArrayList::new));
-
3、使用 HashSet 进行去重
利用 HashSet 不能添加重复数据的特性,由于 HashSet 不能保证添加顺 序,所以只作为判断条件。
public static void removeDuplicate(List<Integer> list) { HashSet<Integer> set = new HashSet<Integer>(list.size()); List<Integer> result = new ArrayList<Integer>(list.size()); for (Integer str : list) { if (set.add(str)) { result.add(str); } } list.clear(); list.addAll(result); System.out.println(list); }
-
4、使用 List 的 contains 方法
public static void removeDuplicate(List<Integer> list) { List<Integer> result = new ArrayList<Integer>(list.size()); for (Integer str : list) { if (!result.contains(str)) { result.add(str); } } list.clear(); list.addAll(result); System.out.println(list); }