(7) 红黑树转链在转换树的过程中 , 记录了原有链表的顺序 , 红黑树转链表时候 , 直接把TreeNode转换为Node , 因为记录了链表关系 , 所以替换过程很容易 。
(8) 查找
- 扰动函数的使用 , 获取新的哈希值
- 下标的计算 ,tab[(n - 1) & hash
)
- 确定了桶数组下标位置 , 接下来就是对红黑树和链表进行查找和遍历操作了
(9) 删除
- 删除的操作也比较简单 , 没有太多的复杂的逻辑 。
- 另外红黑树的操作因为被包装了 , 只看使用上也是很容易 。
- 这里我们要设定一个既有红黑树又有链表结构的数据场景
- 为了可以有这样的数据结构 , 我们最好把 HashMap 初始长度设定为 64 , 避免在
- 找到 18 个元素 , 分别放在不同节点(这些数据通过程序计算得来);
- 桶数组 02 节点:24、46、68
- 桶数组 07 节点:29
- 桶数组 12 节点:150、172、194、271、293、370、392、491、590
- 添加元素 , 在 HashMap 还是只链表结构时 , 输出测试结果 01
- 添加元素 , 在 HashMap 转换为红黑树的时候 , 输出测试结果 02
- 删除元素 , 在 HashMap 转换为链表结构时 , 输出测试结果 03
排序01:
24 46 68 29 150 172 194 271
排序02:
24 46 68 29 271 150 172 194 293 370 392 491 590
排序03:
24 46 68 29 172 271 150 194
Process finished with exit code 0
- 这一篇 API 源码以及逻辑与上一篇数据结构中扰动函数、负载因子、散列表实现等 , 内容的结合 , 算是把 HashMap 基本常用技术点 , 梳理完成了 。 但知识绝不止于此 , 这里还有红黑树的相关技术内容 , 后续会进行详细 。
- 除了 HashMap 以外还有 TreeMap、ConcurrentHashMap 等 , 每一个核心类都有一与之相关的核心知识点 , 每一个都非常值得深入研究 。 这个烧脑的过程 , 是学习获得的知识的最佳方式 。
- 【飞利浦·斯塔克|重温数据结构经典:HashMap原理】可能关于 HashMap 还有一些疏漏的点 , 也希望阅读的小伙伴可以提出更多的问题 , 互相学习 , 共同进步 , 本文就到这里 , 感谢您的阅读!
- 飞利浦·斯塔克|价格下滑一千多,哈苏四摄+256G,加速清仓是为了迎接新品吗?
- 显示器|空调双寡头格局裂开一条缝隙 飞利浦空调背后的资源重置
- 飞利浦|何必把工作带回家?看看蒲公英路由器X1的组网功能你就知道了
- 英特尔|【芯观点】英特尔能否借UCIe重温王者荣耀?
- 飞利浦·斯塔克|现阶段是买降价后的小米11Pro合适?还是等红米K50Pro+发布再说?
- 飞利浦·斯塔克|为什么好多编程“牛人”不喜欢用Microsoft Visual Studio?
- 飞利浦·斯塔克|三星涉嫌良品率造假,“背锅”的却是高通!外媒:高通是苦不堪言
- 飞利浦|显卡涨的这么猛,有多少人把手里的显卡出掉了? 卖完了会后悔吗?
- 飞利浦|顶级降噪耳机的又一选择——飞利浦Fidelio L3使用评测
- 飞利浦·斯塔克|1000-1500元热门5G手机推荐,内外兼修,主打高性价比