equals和hashCode

package hash_map.hash;

import java.util.HashMap;

public class TestOne {

    public static void main(String[] args) {
        
        //1.哈希值
        //数据比较时,如果数据量比较大,equal就慢,引入哈希值
        //hashCode() 值: JVM根据对象的内存地址和其他信息生成一个整型数据
        
        // 2.hashCode 和equqal
        //两个对象先比较哈希值,如果相等,再通过equal比较结果是true才是真的相等
        //如果两个对象的hashCode相等,equal得到的结果不一定是true,哈希冲突
        
        //3.重写equal方法的时候一定要重写hashCode方法
        //如果不重写hashCode方法,hashCode不同,保存到hashmap中出返回null
        
        
        //4.如果字段值为易变数据最好不要依赖这个字段
        //
        //
        
        User t1 = new User("jack",1);
        User t2 = new User("jack",1);
        System.out.println(t1.hashCode());
        System.out.println(t2.hashCode()); 
        System.out.println(t1.equals(t2)); 
        
        HashMap<User, Integer> map = new HashMap<User, Integer>();
        map.put(t1, 1);
        System.out.println(map.get(t2));
        
        
        
    }

}

package hash_map.hash;

public class User {
    
    private String name;
    private int age;
    
    private String guding = "66";
    
    public User(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    
    @Override
    public boolean equals(Object obj) {
        return this.name.equals(((User)obj).name) && this.age == ((User)obj).age ;
    }
    
    @Override
    public int hashCode() {
        return this.guding.hashCode()*7;
    }
    
}
原文地址:https://www.cnblogs.com/lxh520/p/9226963.html