温馨提示×

温馨提示×

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

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

java Set怎样判断相等

发布时间:2026-10-05 06:38:32 来源:亿速云 阅读:94 作者:小樊 栏目:编程语言

在 Java 中,Set 判断“相等”其实分两个层面:


一、Set 集合中“元素是否相等”(决定是否去重)

Set 依赖元素自身的 equals() 和 hashCode() 来判断两个元素是否相同。

关键规则

  • HashSet / LinkedHashSet
    • 先比较 hashCode()
    • 再比较 equals()
  • TreeSet
    • 使用 Comparator 或元素的 Comparable
    • 不依赖 equals(),而是看 compareTo() == 0

示例(HashSet)

Set<String> set = new HashSet<>();
set.add("a");
set.add("a"); // 不会重复

自定义对象示例:

class User {
    String id;

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

    @Override
    public int hashCode() {
        return Objects.hash(id);
    }
}

⚠️ 只重写 equals 不重写 hashCode 会导致 HashSet 去重失败


二、两个 Set 对象之间是否“相等”

这是 Set 作为集合整体的相等性判断,使用 Set.equals()。

规则

  • 两个 Set 相等 ⇔
    • 元素个数相同
    • 元素内容相同(不关心顺序,除了某些实现)

示例

Set<Integer> s1 = Set.of(1, 2, 3);
Set<Integer> s2 = Set.of(3, 2, 1);

System.out.println(s1.equals(s2)); // true

✅ HashSet / TreeSet / LinkedHashSet 都比较元素,不比较顺序


三、TreeSet 的特殊情况(容易踩坑)

TreeSet<String> set = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
set.add("A");
set.add("a"); // 不会添加

因为:

"A".compareToIgnoreCase("a") == 0

⚠️ 即使 equals() 返回 false,TreeSet 也会认为相等


四、总结速记

场景 判断方式
Set 中元素是否重复 equals() + hashCode()(或 Comparator)
两个 Set 是否相等 Set.equals()(元素相同即可)
TreeSet 元素相等 compareTo() == 0

如果你有具体代码场景(比如自定义对象、TreeSet、并发 Set),我可以帮你针对性分析。

向AI问一下细节

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

AI
助
手