考虑这个类:
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,它可以保证添加/删除/包含在其中O(1)
,HashSet
但我可以获得其他好处吗?
我看到许多散列函数使用素数,构造一个的最佳方式是什么(我想创建一个完美的散列函数是不常见的/罕见的)?
编辑 :