4

BigInteter 太大而无法转换为整数。但是我必须将具有 id (SHA 512) 的对象存储在 a 中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()) 会更有效吗?

4

1 回答 1

6

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

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


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

于 2012-04-23T23:38:57.997 回答