HashMap文档与源码剖析以及使用注意

本文深入剖析HashMap的内部结构,详细解释其数组加链表的实现方式,以及节点定位的位运算原理。同时,指出HashMap在多线程环境下的安全性问题,推荐使用 ConcurrentHashMap 或通过 Collections 工具进行线程安全转换。此外,讨论了HashMap在遍历过程中修改数据的限制,并强调初始化容量和负载因子对性能的影响,提供优化建议。
摘要由CSDN通过智能技术生成

 

 

HashMpa结构源码剖析

HashMap 本质是一个数组,jdk1.8里面的源码就是 一个 Node[]数组

这个Node类型是HashMap中的一个静态内部类,实现了Map.Entry接口

Map.Entry接口利用泛型规范了键值对的基本结构

也就是说HashMap是一个数组,这个数组中每个元素都是一个键值对的结构

此外再观察Node类型,会发现它还有一个Node类型的引用

那么每个Node可以理解为一个Node的链式的集合

那么HashMap就就可以进一步理解每个元素都是一个键值对的链式集合

如果继续观察,会发现Node还有一个hash字段,这个hash字段是用来计算这个node在node数组中的位置

计算的方式是采用和数组的最大下标做与运算

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值