为了账号安全,请及时绑定邮箱和手机立即绑定

面试问题 - 集合中明显重复

面试问题 - 集合中明显重复

萧十郎 2022-09-14 17:57:55
在最近的一次采访中,我看到了这个代码。class User {    private Long id;    private String name;    public void setId(Long id) {        this.id = id;    }    public Long getId() {        return this.id;    }    public void setName(String name) {        this.name = name;    }    public String getName() {        return this.name;    }}Set<User> set = new HashSet<>();User user = new User();user.setId(1L);user.setName("test");set.add(user);User user2 = new User();user2.setId(1L);user2.setName("test");set.add(user2);System.out.println(set.size());面试官问我,对于布景的大小,会打印出什么。我回答了1,因为User的两个实例具有相同的值。但是在面试之后,我运行了代码,我得到了2。既然集合应该具有唯一的值,那么有人可以解释一下发生了什么吗?
查看完整描述

2 回答

?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

equals()方法的默认实现将比较两个对象的内存地址,而hashCode()方法的默认实现将是对象的内存地址。当我们创建 2 个指向不同内存位置的对象时,默认情况下它们将有所不同,除非我们通过重写类的 2 个方法来定义相等性和哈希代码。但是,如果您尝试将同一实例添加两次,则只会将一个实例添加到集合中。希望这很清楚。


查看完整回答
反对 回复 2022-09-14
?
湖上湖

TA贡献2003条经验 获得超2个赞

感谢 Slaw 的答案 - 不会覆盖和。UserequalshashCode



查看完整回答
反对 回复 2022-09-14
  • 2 回答
  • 0 关注
  • 80 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信