本文是关于hashcode和hash算法的实现原理。边肖觉得很实用,所以想分享给大家学习。希望大家看完这篇文章能有所收获。我不多说。让我们和边肖一起看看。
哈希算法如何实现密钥的均匀分散?
在JDK,Object的hashcode方法是一个局部方法,也就是用C语言或者C实现,直接返回对象的内存地址。
我们没有重写hashCode方法,所以在HashMap中使用了对象的内存地址,所以它一定是不同的。
字符串类型如何覆盖hashCode方法?
/**
*字符串的char数组的个数每次乘以31,然后叠加,最后返回。因此,每个不同字符串返回的hashCode肯定是不同的。
*/
publishingtashcode(){ 0
inth=hash
if(h==0 value . length 0){ 0
char val[]=值;
for(inti=0;ivalue.lengthI){ 0
h=31 * h val[I];
}
hash=h;
}
returnh
}
那么为什么要用31呢?
冲突的风险很高。
31 * i==(i 5) - i
63溢出的风险更大。
15块怎么样?
00-1010,以便更好地统一哈希表的下标。
static finalinthash(Objectkey){ 0
inth
return(key==null)?0:(h=key.hashcode())^(h16);
}
也就是说,计算出的int类型32位(4字节),而不是低16位,将高16位移过去,以便尽可能均匀地分布它们。
也就是hashcode和hash算法的实现原理是什么。边肖认为,一些知识点可能会在我们的日常工作中看到或使用。我希望你能通过这篇文章学到更多的知识。更多详情请关注行业资讯频道。
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/37104.html