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