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

在最近的一次采访中,我看到了这个代码。


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。既然集合应该具有唯一的值,那么有人可以解释一下发生了什么吗?


萧十郎
浏览 81回答 2
2回答

鸿蒙传说

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

湖上湖

感谢 Slaw 的答案 - 不会覆盖和。UserequalshashCode
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java