如何重写hashcode和equals方法
2018-01-27 15:27
387 查看
参考:http://www.mkyong.com/java/java-how-to-overrides-equals-and-hashcode/
翻译:http://blog.csdn.net/zzg1229059735/article/details/51498310
我觉得看原文就很好了, 不过还是粘贴出来。
2. 实现
User.java
User.java
翻译:http://blog.csdn.net/zzg1229059735/article/details/51498310
我觉得看原文就很好了, 不过还是粘贴出来。
1. POJO
Some Java examples to show you how to overrideequalsand
hashCode.
public class User { private String name; private int age; private String passport; //getters and setters, constructor }
User user1 = new User("mkyong", 35, "111222333"); User user2 = new User("mkyong", 35, "111222333"); System.out.println(user1.equals(user2)); // false
2. 实现
实现1. Classic Way(经典方法)
The 17 and 31 hash code idea is from the classic Java book – effective Java : item 9public 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 instanceof User)) { return false; } User user = (User) o; return user.name.equals(name) && user.age == age && user.passport.equals(passport); } //Idea from effective Java : Item 9 @Override public int hashCode() { int result = 17; result = 31 * result + name.hashCode(); result = 31 * result + age; result = 31 * result + passport.hashCode(); return result; } }
实现2. JDK 7
For JDK 7 and above, you can use the newObjectsclass to generate the equals and hash code values.
User.java
import java.util.Objects; 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 instanceof User)) { return false; } User user = (User) o; return age == user.age && Objects.equals(name, user.name) && Objects.equals(passport, user.passport); } @Override public int hashCode() { return Objects.hash(name, age, passport); } }
实现3. Apache Commons Lang
Alternatively, you can use the Apache Commons LangEqualsBuilderand
HashCodeBuilderfunction.
User.java
import org.apache.commons.lang3.builder; 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 instanceof User)) { return false; } User user = (User) o; return new EqualsBuilder() .append(age, user.age) .append(name, user.name) .append(passport, user.passport) .isEquals(); } @Override public int hashCode() { return new HashCodeBuilder(17, 37) .append(name) .append(age) .append(passport) .toHashCode(); } }
3. Test again
After overrides bothequalsand
hashCode.
User user1 = new User("mkyong", 35, "111222333"); User user2 = new User("mkyong", 35, "111222333"); System.out.println(user1.equals(user2)); // true
4.hashcode()和equals()的作用、区别、联系
参考: https://www.cnblogs.com/keyi/p/7119825.html5. hashset 添加自定义对象时,重写hashcode和equals方法
参考:https://jingyan.baidu.com/article/d5a880eb8fb61d13f147cc99.html相关文章推荐
- 为什么要重写hashCode()方法和equals()方法以及如何进行重写
- 为什么要重写hashCode()方法和equals()方法及如何重写
- 如何重写hashCode()和equals()方法
- JAVA正确地自定义比较对象---如何重写equals方法和hashCode方法
- 为什么要重写java中对象的equals方法和hashCode方法以及如何重写
- 正确重写hashcode hashcode与equals方法 集合元素如何判断是否相等 集合如何查看是否包含某个元素
- Java如何正确重写hashCode()和equals()方法
- 如何正确的重写equals() 和 hashCode()方法
- 如何重写equals和hashCode方法
- 如何重写hashCode()和equals()方法
- 关于为什么要重写hashCode()方法和equals()方法及如何重写
- 如何重写hashCode()和equals()方法
- Set是如何实现元素不重复的&重写equals()方法之后也必须重写hashCode()方法
- 如何正确的重写equals() 和 hashCode()方法
- 关于为什么要重写hashCode()方法和equals()方法及如何重写
- 为什么重写equals 和hashCode方法,如何重写
- 如何重写hashCode()和equals()方法
- 如何重写hashCode()和equals()方法
- 如何正确的重写equals() 和 hashCode()方法
- 关于为什么要重写hashCode()方法和equals()方法及如何重写