Java List 去除重复元素的几种方法
在Java中,去除List中的重复元素有几种常见的方法,以下是几种主要的实现方式:

(图片来源网络,侵删)
使用HashSet(不保留顺序)
List<String> listWithDuplicates = Arrays.asList("A", "B", "C", "A", "B", "D");
List<String> uniqueList = new ArrayList<>(new HashSet<>(listWithDuplicates));
使用LinkedHashSet(保留插入顺序)
List<String> listWithDuplicates = Arrays.asList("A", "B", "C", "A", "B", "D");
List<String> uniqueList = new ArrayList<>(new LinkedHashSet<>(listWithDuplicates));
使用Java 8 Stream API(保留顺序)
List<String> listWithDuplicates = Arrays.asList("A", "B", "C", "A", "B", "D");
List<String> uniqueList = listWithDuplicates.stream()
.distinct()
.collect(Collectors.toList());
使用循环手动去重(保留顺序)
List<String> listWithDuplicates = Arrays.asList("A", "B", "C", "A", "B", "D");
List<String> uniqueList = new ArrayList<>();
for (String item : listWithDuplicates) {
if (!uniqueList.contains(item)) {
uniqueList.add(item);
}
}
使用Guava库(保留顺序)
List<String> listWithDuplicates = Arrays.asList("A", "B", "C", "A", "B", "D");
List<String> uniqueList = Lists.newArrayList(Sets.newLinkedHashSet(listWithDuplicates));
使用TreeSet(自然排序)
List<String> listWithDuplicates = Arrays.asList("A", "B", "C", "A", "B", "D");
List<String> uniqueList = new ArrayList<>(new TreeSet<>(listWithDuplicates));
性能比较
- HashSet/LinkedHashSet: O(n)时间复杂度,适合大多数情况
- Stream.distinct(): O(n)时间复杂度,代码简洁
- 手动循环: O(n²)时间复杂度,不推荐用于大型列表
- TreeSet: O(n log n)时间复杂度,会排序元素
选择哪种方法取决于你的具体需求,是否需要保留原始顺序,以及对性能的要求,对于大多数现代Java应用,使用Stream API或LinkedHashSet是很好的选择。

(图片来源网络,侵删)
