杰瑞科技汇

Java List如何高效去重?

Java List 去除重复元素的几种方法

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

Java List如何高效去重?-图1
(图片来源网络,侵删)

使用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是很好的选择。

Java List如何高效去重?-图2
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇