4

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())へのキャストになりますか?

4

1 に答える 1

6

車輪の再発明を試みないでください-単に使用してくださいgetId().hashCode()

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


String.hashCode()効率的で高品質のハッシュアルゴリズムを使用しているため、これが最良の選択です。そしてそれはあなたのコードをより単純にします、それは常に良いことです。

于 2012-04-23T23:38:57.997 に答える