zoukankan      html  css  js  c++  java
  • equals()和hashCode()方法笔记

    1、当向集合中添加对象时,首先计算要增加对象的hashCode码,根据该值得到一个位置用来存放当前的对象,当该位置没有一个对象存在的话,直接将该对象增加进去。如果该位置有一个对象存在的话,接着将准备增加到集合中的对象与该位置的对象进行equals方法比较,如果返回false,那么集合认为集合中不存在该对象,再进行一次散列,将该对象放到散列后计算出的新地址里。如果equals方法返回true,那么集合认为已经存在该对象,不会再让该对象增加到集合中。

    2、当重写equals方法时必须重写hashCode方法。如果一个类的两个对象使用equals方法比较时结果为true,那么这两个对象一定具有相同的hashCode。相反,hashCode相同,不一定equals

    import java.util.HashSet;
    import java.util.Iterator;
    import java.util.Set;
    
    public class Test {
        public static void main(String[] args) {
            Set<Person> set = new HashSet<Person>();
            set.add(new Person("zhangsan"));
            set.add(new Person("lisi"));
            set.add(new Person("zhangsan"));
    
            for (Iterator<Person> iter = set.iterator(); iter.hasNext();) {
                System.out.println(iter.next().getName());
            }
        }
    }
    
    class Person {
        String name;
    
        public Person(String name) {
            this.name = name;
        }
    
        public String getName() {
            return this.name;
        }
    
        // 重写hashCode()方法
        @Override
        public int hashCode() {
            return this.name.hashCode();
        }
    
        // 重写equals() 方法
        @Override
        public boolean equals(Object obj) {
            if (obj == null)
                return false;
            // 同一个对象直接返回true
            if (obj == this)
                return true;
            if (obj instanceof Person) {
                Person p = (Person) obj;
                if (p.name.equals(this.name))
                    return true;
            }
            return false;
        }
    
    }
  • 相关阅读:
    [ES6] Objects create-shorthand && Destructuring
    [ES6] Spread Operator
    [ES6] Rest Parameter
    [ES6] Function Params
    [React] Extracting Private React Components
    [Javascript] Array methods in depth
    生物-大脑极限:大脑极限
    生物-永生计划:永生计划
    物理-纳米技术-纳米技术应用:纳米技术应用
    物理-纳米技术:纳米技术
  • 原文地址:https://www.cnblogs.com/zywu/p/5792978.html
Copyright © 2011-2022 走看看