java.util.HashMap
来源:互联网 发布:imovie的windows版 编辑:程序博客网 时间:2024/06/05 20:50
要点
- 数据结构:数组+链表+红黑树(链表中节点大于8时)
- 初始数组长度:DEFAULT_INITIAL_CAPACITY = 1 << 4;(16)
- 扩容因子:默认值0.75
- 当节点数超过阈值(数组长度*扩容因子)时,数组长度和阈值均扩容到原来2倍,扩容时,需要重新根据hash值计算节点在新数组的位置,数组最大容量为Integer.MAX_VALUE
- 为什么HashMap容量一定要为2的幂呢?目的是让节点均匀分布在数组中,提高查询效率,增大空间利用率
- 判断key值是否相等:if (e.hash == hash &&((k = e.key) == key || (key != null && key.equals(k))))。注意:此处需要先比较hash值,因为索引值一样,hash值可能不一样
- 综上,可知理想容量为C/0.75,如果计算结果不是2的幂也没关系,初始化时会自动像上找最小2的幂对应的数值进行初始化
获取hashcode
static final int hash(Object key) { int h; return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16); }
定位数组中位置
if ((tab = table) == null || (n = tab.length) == 0) n = (tab = resize()).length; if ((p = tab[i = (n - 1) & hash]) == null) tab[i] = newNode(hash, key, value, null);
阅读全文
0 0
- [Java] java.util.HashMap
- java.util.HashMap
- HashMap java.util.ConcurrentModificationException
- HashMap java.util.ConcurrentModificationException
- 细说java.util.HashMap
- HashMap java.util.ConcurrentModificationException
- 13 java.util.HashMap
- java.util包---HashMap
- java.util.HashMap
- java.util.HashMap
- 三顾java.util.HashMap
- java.util.HashMap源码初探
- java.util.HashMap深度学习
- java.util.HashMap<K,V>
- java.util.HashMap源码解析
- 4.java.util.Map 与 5. java.util.HashMap
- java.util.HashMap源码要点浅析
- 解决java.util.HashMap.get异常
- 观察者模式
- POJ-1276 多重背包问题
- Android引导页消失进入软件
- Codeforces Gym 101164 H. Pub crawl (凸包)
- 【剑指offer】题45:圆圈中最后剩下的数字
- java.util.HashMap
- 归并排序
- Codeforces Gym 101164 K. Cutting (字符串 HASH)
- V4L2常用命令详解
- Nginx--反向代理、负载均衡、缓存、fpm
- PyCharm 命令行 传递参数
- 快速排序
- spark RDD的map和flatmap
- Linux shell的标准输入、输出和错误