このクラスを検討してください:
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
ですか? 私の知る限り、追加/削除/含むことを保証できますが、それO(1)
をHashSet
持つことで他の利点を得ることができますか?
多くのハッシュ関数が素数を使用しているのを見ましたが、素数を構築する最良の方法は何ですか (完全なハッシュ関数を作成することは一般的でない/まれだと思います) ?
編集 :
素数について ->ここで答えた