ToB企服应用市场:ToB评测及商务社交产业平台

标题: java~重写hashcode和equals [打印本页]

作者: 温锦文欧普厨电及净水器总代理    时间: 2024-9-2 13:03
标题: java~重写hashcode和equals
单字段和多字段重写hashcode

在 Java 中,重写 hashCode 方法的场景通常与对象的哈希值计算有关,特别是在使用哈希表(如 HashMap, HashSet 等)时。下面是你提供的两种 hashCode 实现的具体使用场景分析:
1. 第一种实现
  1. @Override
  2. public boolean equals(Object o) {
  3.     if (this == o) return true;
  4.     if (o == null || getClass() != o.getClass()) return false;
  5.     DefaultClientScopeRealmMappingEntity.Key key = (DefaultClientScopeRealmMappingEntity.Key) o;
  6.     if (clientScopeId != null ? !clientScopeId.equals(key.getClientScopeId() != null ? key.getClientScopeId() : null) : key.getClientScopeId() != null) return false;
  7.     if (realm != null ? !realm.getId().equals(key.realm != null ? key.realm.getId() : null) : key.realm != null) return false;
  8.     return true;
  9. }
  10. @Override
  11. public int hashCode() {
  12.     int result = clientScopeId != null ? clientScopeId.hashCode() : 0;
  13.     result = 31 * result + (realm != null ? realm.getId().hashCode() : 0);
  14.     return result;
  15. }
复制代码
使用场景:

2. 第二种实现
  1. @Override
  2. public boolean equals(Object o) {
  3.     if (this == o) return true;
  4.     if (o == null) return false;
  5.     if (!(o instanceof CredentialEntity)) return false;
  6.     CredentialEntity that = (CredentialEntity) o;
  7.     if (!id.equals(that.getId())) return false;
  8.     return true;
  9. }
  10. @Override
  11. public int hashCode() {
  12.     return id.hashCode();
  13. }
复制代码
使用场景:

总结

在现实开发中,选择哪种实现应依据对象的设计及其在数据布局中的使用方式。确保 hashCode 和 equals 方法的一致性是非常重要的,以制止埋伏的错误。
hashCode 方法和 equals 方法的不一致时的题目

在 Java 中,hashCode 方法和 equals 方法的不一致性会导致一系列题目,特别是在使用哈希表(如 HashMap, HashSet 等)时。以下是一些主要的题目:
1. 数据丢失

2. 错误的集合行为

3. 性能题目

4. 难以调试

5. 违背条约

结论

为了制止上述题目,确保在重写 equals 方法时也相应地重写 hashCode 方法,并且要保证它们之间的一致性。通常的做法是:

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4