温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java Set如何去除重复元素

发布时间:2026-09-14 12:12:43 来源:亿速云 阅读:85 作者:小樊 栏目:编程语言

在 Java 中,Set 本身就是用来去除重复元素的集合,其核心特性是:不允许存储重复元素。下面从「使用方式」和「去重原理」两个角度说明。


一、直接使用 Set 去重(最常用)

1️⃣ 对 List 去重

List<String> list = Arrays.asList("a", "b", "a", "c", "b");

Set<String> set = new HashSet<>(list);
System.out.println(set); // [a, b, c]

✅ 利用 HashSet 的构造方法即可自动去重。


2️⃣ 直接添加元素(自动去重)

Set<Integer> set = new HashSet<>();
set.add(1);
set.add(2);
set.add(1); // 不会生效

System.out.println(set); // [1, 2]

二、常见 Set 实现类对比

实现类 是否去重 是否有序 说明
HashSet 最常用,性能最好
LinkedHashSet 保持插入顺序
TreeSet 按自然顺序或 Comparator 排序

示例:保持顺序去重

List<String> list = Arrays.asList("b", "a", "b", "c");
Set<String> set = new LinkedHashSet<>(list);
System.out.println(set); // [b, a, c]

三、自定义对象去重(重点)

⚠️ Set 去重依赖 equals()hashCode()

错误示例(不会去重)

class User {
    String name;
}
Set<User> set = new HashSet<>();
set.add(new User("Tom"));
set.add(new User("Tom")); // 认为是不同对象

正确做法:重写 equals 和 hashCode

class User {
    String name;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof User)) return false;
        return Objects.equals(name, ((User) o).name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name);
    }
}
Set<User> set = new HashSet<>();
set.add(new User("Tom"));
set.add(new User("Tom")); // 去重成功

四、Java 8 Stream 去重(更优雅)

List<String> list = Arrays.asList("a", "b", "a");
List<String> result = list.stream()
                          .distinct()
                          .collect(Collectors.toList());

五、总结

Set 去重的核心:

  • 基本类型 / String:直接用 Set
  • 自定义对象:必须重写 equals()hashCode()
  • 想保顺序:LinkedHashSet
  • 想排序:TreeSet

如果你有 具体场景(如对象去重、性能要求、并发环境),可以告诉我,我可以给你更合适的方案。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI