温馨提示×

温馨提示×

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

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

java Set能放重复对象吗

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

在 Java 中,Set 不能存放“相等”的重复元素,但是可以存放不同的对象实例(即使内容相同,只要 equals() 和 hashCode() 认为不相等)。

具体说明如下:

1. Set 的语义

Set 是不包含重复元素的集合。
判断是否重复,依赖元素的:

  • equals()
  • hashCode()(对 HashSet、LinkedHashSet 等)

2. 不同对象 vs 重复对象

Set<String> set = new HashSet<>();
set.add(new String("abc"));
set.add(new String("abc"));
System.out.println(set.size()); // 1

虽然是两个 不同的对象实例,但内容相同,equals() 返回 true,所以被视为重复,只保留一个。

Set<Object> set = new HashSet<>();
set.add(new Object());
set.add(new Object());
System.out.println(set.size()); // 2

两个不同的 Object,equals() 默认比较引用,不相等,所以可以放进去。

3. 自定义类的情况

如果你自定义类但没重写 equals() 和 hashCode():

class User {
    String name;
}
Set<User> set = new HashSet<>();
set.add(new User("Tom"));
set.add(new User("Tom"));
// size = 2(被认为是不同元素)

如果重写了:

@Override
public boolean equals(Object o) { ... }
@Override
public int hashCode() { ... }

内容相同的 User 就不能重复放入 Set。

4. 总结

✅ Set 不能放“逻辑上重复”的对象
✅ Set 可以放多个不同的对象实例
❌ 如果你发现“重复对象放进去了”,一般是 equals/hashCode 没写好

如果你愿意,我可以给你画一张 HashSet 去重原理图 或对比 List vs Set。

向AI问一下细节

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

AI
助
手