HashMap 详解一

简介: 本文代码来自JDK8 实现原理 建立一个数组 根据元素哈希值计算数组索引, 保存到数组 索引号相同的元素通过链表保存 链表长度超过范围转红黑树保存 默认常量 初始长度大小: DEFAULT_INITIAL_CAPACITY = 1 << 4, 为了区分容量和元素数目, 这里就用长度表示容量 最大长.

本文代码来自JDK8

实现原理

  1. 建立一个数组
  2. 根据元素哈希值计算数组索引, 保存到数组
  3. 索引号相同的元素通过链表保存
  4. 链表长度超过范围转红黑树保存

默认常量

  • 初始长度大小: DEFAULT_INITIAL_CAPACITY = 1 << 4, 为了区分容量和元素数目, 这里就用长度表示容量
  • 最大长度大小: MAXIMUM_CAPACITY = 1 << 30
  • 默认加载因子: DEFAULT_LOAD_FACTOR = 0.75f
  • 链表转红黑树的阈值: TREEIFY_THRESHOLD = 8
  • 红黑树转链表的阈值: UNTREEIFY_THRESHOLD = 6
  • 转换红黑树要求最小数组长度: MIN_TREEIFY_CAPACITY = 64

变量

  • transient Node[] table: 保存元素的数组
  • transient int size: 元素个数, 不是数组长度
  • int threshold: 对数组扩容的阈值, 容量*加载因子
  • final float loadFactor: 加载因子, 越大填充的数据就越多, 冲突也会越多; 越小填充的数据就越少, 冲突也会减少, 为什么取 0.75 默认值就不深入讨论了

哈希值计算

// key为空, 对应哈希值为 0
// 否则将 key 的哈希值进行扰动: 高 16 位与低 16 位进行异或
// 这样做的原因是当哈希值与数组长度减一进行与运算得出索引时, 
// 对于数组长度比较小的情况, 如果没有扰动, 哈希值的高位将不参与运算, 最后的索引值很有可能会重复
static final int hash(Object key) {
    int h;
    return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}

关于 tableSizeFor 方法留到下一 part 再讲.


相关文章
|
编解码 算法 搜索推荐
淘宝人生里的虚拟人像渲染技术
全程干货,淘宝人生里的虚拟人像是如何实现的?
淘宝人生里的虚拟人像渲染技术
|
自然语言处理 算法 BI
Baum-Welch算法
Baum-Welch算法
|
消息中间件 数据库
如何保证 RabbitMQ 消费者端在更新数据库时可以成功
如何保证 RabbitMQ 消费者端在更新数据库时可以成功
397 0
|
安全 Python
【Python】@property用法简述
【Python】@property用法简述
322 0
|
消息中间件 存储 Apache
RocketMQ实战教程之常见概念和模型
Apache RocketMQ 实战教程介绍了其核心概念和模型。消息是基本的数据传输单元,主题是消息的分类容器,支持字节、数字和短划线命名,最长64个字符。消息类型包括普通、顺序、事务和定时/延时消息。消息队列是实际存储和传输消息的容器,是主题的分区。消费者分组是一组行为一致的消费者的逻辑集合,也有命名限制。此外,文档还提到了一些使用约束和建议,如主题和消费者组名的命名规则,消息大小限制,请求超时时间等。RocketMQ 提供了多种消息模型,包括发布/订阅模型,有助于理解和优化消息处理。
|
机器学习/深度学习 搜索推荐 大数据
大数据与教育:学生表现分析的工具
【10月更文挑战第31天】在数字化时代,大数据成为改善教育质量的重要工具。本文探讨了大数据在学生表现分析中的应用,介绍学习管理系统、智能评估系统、情感分析技术和学习路径优化等工具,帮助教育者更好地理解学生需求,制定个性化教学策略,提升教学效果。尽管面临数据隐私等挑战,大数据仍为教育创新带来巨大机遇。
|
算法 数据可视化 Java
数学建模常用算法:启发式优化算法合辑(内含多种智能优化算法,使用java实现算法、详细注释、并进行结果可视化)
数学建模常用算法:启发式优化算法合辑(内含多种智能优化算法,使用java实现算法、详细注释、并进行结果可视化)
1222 2
|
Unix Linux Windows
获取网站绝对路径常用方法
获取网站绝对路径常用方法
546 1
|
Java 程序员 API
【深入探究 Qt 线程】一文详细解析Qt线程的内部原理与实现策略
【深入探究 Qt 线程】一文详细解析Qt线程的内部原理与实现策略
1093 0
|
弹性计算 关系型数据库 MySQL
阿里云服务器经济型e实例2核2G3M带宽99元搭建网站图文教程参考
经济型e实例2核2G,3M固定带宽,40G ESSD Entry云盘,价格只要99元,这是阿里云精心为开发者和普通企业用户推出的一款上云首选必备产品,可用于中小型的web应用以及企业应用。本文为大家展示使用这款云服务器搭建网站的相关教程,以供参考。
阿里云服务器经济型e实例2核2G3M带宽99元搭建网站图文教程参考
下一篇
oss云网关配置