重写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()方法中,

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

  

猜你喜欢

转载自www.cnblogs.com/Donnnnnn/p/9056811.html
今日推荐