java - 使用 BigInteger 重写 public int hashCode()

标签 java collections hashcode

BigInteter 太大而无法转换为整数。但是我必须将具有 id (SHA 512) 的对象存储在 HashMap 中,并且需要一个没有很多冲突的哈希函数。

我试过了。但是,我不确定某处是否没有聚类。

@Override
public boolean equals(Object obj) {
    if (this == obj) {
        return true;
    }
    if (obj == null) {
        return false;
    }
    if (getClass() != obj.getClass()) {
        return false;
    }
    Advertisement other = (Advertisement) obj;
    return this.getId().equals(other.getId());
}

@Override
public int hashCode() {
    return new BigInteger(getId(), 16).hashCode();
}

转换为整数 (bi.intValue()) 会更有效吗?

最佳答案

不要试图重新发明轮子 - 只需使用 getId().hashCode():

@Override
public int hashCode() {
    return getId().hashCode();
}


String.hashCode()使用高效、高质量的哈希算法,因此是最佳选择。它使您的代码更简单,这总是一件好事。

关于java - 使用 BigInteger 重写 public int hashCode(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10289659/

相关文章:

java - 单元测试等于和哈希码 - 一个复杂的故事

scala - 直到?处理分块输入。如何?

java - 如何用Java实现clojure ISeq?

java - 没有自然键可用时 equals() 和 hashCode() 的实现?

java - 当未引用的@Singleton bean 被销毁时?

java - 如何使用 Java(无 DB)更快地删除文件中的重复/聚合行

java - ConcurrentHashMap 构造函数参数?

java - 将参数传递给方法时,强化将查询标记为 sqlInjection

java - 使用 JComboBox(类别) 更改/更新 JTable 内容

java - 将公钥存储在sharedPreferences中并检索它