码迷,mamicode.com
首页 > 其他好文 > 详细

重写equals() 和 hashCode()方法

时间:2018-05-18 16:49:32      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:obj   bool   set集合   nbsp   const   mil   pre   passport   equals   

去重操作时,

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

标签:obj   bool   set集合   nbsp   const   mil   pre   passport   equals   

原文地址:https://www.cnblogs.com/Donnnnnn/p/9056811.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!