1. 程式人生 > >重寫equals() 和 hashCode()方法

重寫equals() 和 hashCode()方法

@override and 操作 ole obj 我們 override mil 想法

去重操作時,

有時候往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()方法