重写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()方法的主要内容,如果未能解决你的问题,请参考以下文章