使用BigInteger覆盖public int hashCode()

hea*_*owe 4 java collections hashcode

BigInteter太大而无法转换为整数.但我必须在id中存储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();
}
Run Code Online (Sandbox Code Playgroud)

是一个转换为整数(bi.intValue())更有效?

Boh*_*ian 6

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

@Override
public int hashCode() {
    return getId().hashCode();
}
Run Code Online (Sandbox Code Playgroud)


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