は、このクラスを検討メリット:パーフェクトハッシュ関数と
public final class MyDate {
private int year, month, day;
public MyDate(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
}
//Some stuff
@Override
public int hashCode() {
return ((year << 4) | month) << 5 | day;
}
}
メモリに我々が持っているので、これは完璧なハッシュ関数である:
をので、赤、5 bits
店舗の日に( 1〜31)、黄色で4 bits
は月(1〜12)を格納し、その他は年(1〜16777215)を格納します。
完全なhashFunction
のメリットは何ですか? AFAIK、HashSet
でO(1)
に追加/削除/含まれていることを保証できますが、他の利点がありますか?
私は多くのハッシュ関数が素数を使っているのを見ました。それを構築するには何が最良の方法ですか(私は完璧なハッシュ関数を作成するのはうれしいですか?
EDIT:素数について
は - >here
あなたの完璧なハッシュ関数は、潜在的なハッシュ配列がすべての可能な値に適合するようにサイズ調整されている場合にのみ有益です(これはjdk HashSet/HashMapではほとんどありません)。 – jtahlborn
私はそれを得ることができません:なぜ私は簡単に私は1つを必要とする新しいインスタンスを作成することができますハッシュセットに日付を入れて? – Andy
@Andyこれはその例です – user2336315