重写equals() 和 hashCode()方法

Posted 王晓东

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了重写equals() 和 hashCode()方法相关的知识,希望对你有一定的参考价值。

去重操作时,

有时候往Set集合存放对象User,我们User类的字段太多时,比如有50个字段,

 

判断两个User对象相同,不需要判断它们所有字段都相同,只需要判断它们的某几个字段相同,就定为它们俩重复,

 

这时候需要重写Equals()方法和HashCode()方法,

 

 

public class User {  
    private String name;  
    private int age;  
    private String passport;  
    //getters and setters, constructor  


    @Override  
    public boolean equals(Object o) {  
        if (o == this) 
			return true;  
		if (o ==null)
			return false;  
        if (!(o instanceof User)) {  
            return false;  
        }  
        User user = (User) o;  
        return user.name.equals(name) &&  
                user.age == age &&  
                user.passport.equals(passport);  
    }  
    
	//这种17和31散列码的想法来自经典的Java书籍——《Effective Java》第九条
    @Override  
    public int hashCode() {  
        int result = 17;  
        result = 31 * result + name.hashCode();  
        result = 31 * result + age;  
        result = 31 * result + passport.hashCode();  
        return result;  
    }  
}  

  

在Equals()方法和HashCode()方法中,

判断哪几个字段重复,就定为对象相同

 

 

  

以上是关于重写equals() 和 hashCode()方法的主要内容,如果未能解决你的问题,请参考以下文章

【彻底理解】 为啥重写equals()方法为啥要重写hashCode()方法

关于equals与hashcode的重写

为什么要重写equals和hashcode方法

hashcode和equals方法

为啥重写equals方法,一定要重写HashCode方法?

在java中,关于equals(),和hashCode()的重写问题。