Java List去重方法详解及高效去重技巧探讨?
- 后端开发
- 2025-10-26
- 9
在Java中,处理List集合时,去重是一个常见的需求,以下是一些常见的方法来实现Java List去重:
使用HashSet
HashSet是基于HashMap实现的,它不允许重复的元素,通过将List转换为HashSet,可以自动去除重复的元素。
使用LinkedHashSet
LinkedHashSet是HashSet的子类,它不仅保证了元素的唯一性,还保持了元素的插入顺序。
import java.util.Arrays; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; public class ListDistinctExample { public static void main(String[] args) { List<Integer> list = Arrays.asList(1, 2, 2, 3, 4, 4, 5); Set<Integer> set = new LinkedHashSet<>(list); List<Integer> distinctList = new ArrayList<>(set); System.out.println(distinctList); } }
使用Stream API
Java 8引入了Stream API,它提供了一种声明式的方式来处理集合,使用Stream API,可以轻松地对List进行去重。
import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class ListDistinctExample { public static void main(String[] args) { List<Integer> list = Arrays.asList(1, 2, 2, 3, 4, 4, 5); List<Integer> distinctList = list.stream() .distinct() .collect(Collectors.toList()); System.out.println(distinctList); } }
使用自定义方法
如果List中的元素是自定义对象,可以使用自定义方法来比较对象是否相等。

import java.util.ArrayList; import java.util.List; public class ListDistinctExample { public static void main(String[] args) { List<Person> list = new ArrayList<>(); list.add(new Person("Alice", 25)); list.add(new Person("Bob", 30)); list.add(new Person("Alice", 25)); List<Person> distinctList = new ArrayList<>(); for (Person person : list) { if (!distinctList.contains(person)) { distinctList.add(person); } } System.out.println(distinctList); } static class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Person person = (Person) o; return age == person.age && Objects.equals(name, person.name); } @Override public int hashCode() { return Objects.hash(name, age); } } }
使用Java 9的List接口方法
从Java 9开始,List接口增加了一个removeIf方法,可以用来移除满足特定条件的元素。
import java.util.ArrayList; import java.util.List; public class ListDistinctExample { public static void main(String[] args) { List<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.add(2); list.add(3); list.add(4); list.add(4); list.add(5); list.removeIf(item > list.indexOf(item) != list.lastIndexOf(item)); System.out.println(list); } }
FAQs
Q1:如何判断一个List是否包含重复元素?

A1: 可以使用HashSet来检查List是否包含重复元素,如果将List转换为HashSet后,HashSet的大小小于List的大小,则说明List中存在重复元素。
import java.util.HashSet; import java.util.List; public class ListDistinctExample { public static void main(String[] args) { List<Integer> list = Arrays.asList(1, 2, 2, 3, 4, 4, 5); Set<Integer> set = new HashSet<>(list); if (set.size() < list.size()) { System.out.println("List contains duplicates."); } else { System.out.println("List does not contain duplicates."); } } }
Q2:如何使用Java 8的Stream API对List进行去重并保持原有顺序?
A2: 可以使用distinct()方法对List进行去重,然后使用collect(Collectors.toList())来收集结果,这样可以保持List中原有的顺序。
import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class ListDistinctExample { public static void main(String[] args) { List<Integer> list = Arrays.asList(1, 2, 2, 3, 4, 4, 5); List<Integer> distinctList = list.stream() .distinct() .collect(Collectors.toList()); System.out.println(distinctList); } }
