HashMap底层详解-002-hash算法、长度的秘密
来源:互联网 发布:阿里云 内网穿透 编辑:程序博客网 时间:2024/06/05 07:32
第二天,小粉粉和小灰灰又遇见了……
之前咱们说过,有一个hash方法,用于计算元素的下标值。
index = hash(key)
在hash方法内部,我们通过key的hashCode值与HashMap的长度做某种运算,可以得到最后的index值。
index = key.hashCode() % hashMap.length
1.对hash值进行调整
/** * 如果Key值为null,返回0;如果Key值不为空,返回原hash值和原hash值无符号右移16位的值按位异或的结果。 * 按位异或就是把两个数按二进制,相同就取0,不同就取1。 * 所以这个hash()函数对于非null的hash值,仅在其大于等于2^16的时候才会重新调整其值。 */static final int hash(Object key) { int h; return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);}
2.进行与运算
final V putVal(int hash, K key, V value, boolean onlyIfAbsent, boolean evict) { Node<K,V>[] tab; Node<K,V> p; int n, i; // n的值是表长 if ((tab = table) == null || (n = tab.length) == 0) n = (tab = resize()).length; // (n - 1) & hash,与hash值进行与元素 if ((p = tab[i = (n - 1) & hash]) == null) tab[i] = newNode(hash, key, value, null); //…………
我们知道 n-1 的二进制值是 1111,它与任何数进行与运算,结果都是那个数的最后四位(<=15)。
欢迎加入交流群:451826376
更多信息:www.itcourse.top
阅读全文
0 0
- HashMap底层详解-002-hash算法、长度的秘密
- Hashmap的hash算法
- Java HashMap的hash算法
- hash冲突的解决方法以及hashMap的底层实现
- Java的HashMap底层实现详解
- HashMap 底层算法分析
- HashMap底层详解
- HashMap底层实现详解
- HashMap底层详解
- HashMap的hash算法(解决hash冲突的方式)
- java hash hashMap详解
- HashMap的底层实现
- HashMap的底层实现
- HashMap的底层实现
- HashMap的底层实现
- hashmap的底层实现
- HashMap的底层实现
- HashMap的底层实现
- 前后端分离后的前端时代
- 《C语言的面向对象(面向较大型软件)》ppt分享和ppt注解
- 逐浪字库打造最全的书法字体,最全的合集(字体书法欣赏下载)
- mysql数据误删除的恢复
- Windows定时任务备份文件夹
- HashMap底层详解-002-hash算法、长度的秘密
- 倒计时:11.16今晚8点CSDN直播《C语言大型软件设计的面向对象》
- HashMap底层详解-003-resize、并发下的安全问题
- ncaught Error: [$injector:cdep] angular 循环依赖
- 迷茫的程序员
- 数组中出现次数超过一半的数字
- 网易2017春招编程题:赶去公司 [python]
- 从paxos到zookeeper读书笔记(第四章)
- 代码生成工具 rapid-framework