先来看看jdk1.8源码:
jdk1.8源码.png
jdk1.7源码:
jdk1.7源码..png
简单来说,不管是jdk1.8无符号右移16位再异或,还是jdk1.7对 hashCode 分别无符号右移 (>>>) 7 位和 4 位,再与自身进行异或(^)处理,都是为了降低hash冲突的概率,其实说白了,这个hash就是HashMap的扰动函数,而扰动函数的目的就是为了降低冲突。而且hash的值也与table数组的下标相关,具体可以再看源码
先来看看jdk1.8源码:
jdk1.7源码:
简单来说,不管是jdk1.8无符号右移16位再异或,还是jdk1.7对 hashCode 分别无符号右移 (>>>) 7 位和 4 位,再与自身进行异或(^)处理,都是为了降低hash冲突的概率,其实说白了,这个hash就是HashMap的扰动函数,而扰动函数的目的就是为了降低冲突。而且hash的值也与table数组的下标相关,具体可以再看源码
本文标题:谈谈HashMap中的hash()方法
本文链接:https://www.haomeiwen.com/subject/jckijctx.html
网友评论