2012-04-23 10 views
4

BigInteterは大きすぎて整数に変換できません。しかし、私はHashMapにid(SHA 512)を持つオブジェクトを格納し、多くの衝突なしにハッシュ関数が必要です。BigIntegerを使用してpublic int hashCode()をオーバーライドします。

私はこれを試しました。しかし、どこかにクラスタリングがないかどうかはわかりません。

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

答えて

6

車輪の再発明をしようとしないでください - 単にgetId().hashCode()を使用します。

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


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

+0

私はそう思った – headgrowe

関連する問題