Java 完善的哈希函数及其优点
以这一类为例:Java 完善的哈希函数及其优点,java,hash,Java,Hash,以这一类为例: 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; } //Som
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;
}
}
公共最终类MyDate{
私人整数年、月、日;
公共MyDate(整数年、整数月、整数日){
今年=年;
本月=月;
this.day=天;
}
//一些东西
@凌驾
公共int hashCode(){
return((p)一个完美的散列函数保证不会发生冲突。但是,为了能够使用一个函数,您必须准确地知道需要散列的键值集,通常情况并非如此
其他一些不是很完美,但仍然很好的散列函数(以及冲突解决机制)没有这个要求,而且计算速度非常快,因此它们通常更合适。根据Juampi的说法,它很快。
多快?
约0(1)。
Redis是通过哈希表在内存中进行恒定时间查找的一个很好的例子
如果在散列结果中没有一个正好包含一个元素的bucket,那么需要使用equals来比较每个项,这样就可以得到O(1加z)的查找,其中z是bucket大小
但是,非常慢的散列函数肯定不是一个好主意。只有当底层散列数组的大小适合所有可能的值时(这在jdk HashSet/HashMap中不太可能),您的完美散列函数才有用.我不明白:既然我可以在需要时轻松创建一个新实例,为什么还要在哈希集中放一个日期呢?@Andy,这就是一个例子