账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    请问在HashSet集合中存入同一对象,在哈希值相同情况下为什么没有调用equals方法呢?
    88
    0

    Person类中重写了hashCode 跟equals方法,在HashSet集合中添加两次同一对象时在比较得知哈希值相等的时候为什么没有调用equals方法比较就认为元素已经存在了呢?

    public class Person {
        private String name;
        private int age;
        
        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }
        public Person() {
        }
        get、set方法省略...
        @Override
        public int hashCode() {
            int hashCode = this.name.hashCode() + this.age * 27;
            System.out.println(this + "....hashCode" + hashCode);
            return hashCode; 
        }
        @Override
        public boolean equals(Object obj) {
            Person p = (Person) obj;
            System.out.println(this + "...equals..." + p);
            return this.name.equals(p.name) && this.age == p.age;
        }
        @Override
        public String toString() {
            return this.name + "," + this.age;
        }

    测试类代码:

    public class HashSetTest {
    
        public static void main(String[] args) {
            HashSet hs = new HashSet();
            Person ps = new Person("test", 21);
    
            hs.add(ps);
            hs.add(ps);
    
            for (Iterator it = hs.iterator(); it.hasNext(); ) {
                Person p = (Person) it.next();
                System.out.println(p.getName() + "," + p.getAge());
            }
        }
    
    }

    结果:

    test,21....hashCode3557065
    test,21....hashCode3557065
    test,21
    1
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 雷袭月启 普通会员 1楼
      { "error": "Failed to generate content." }
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部