java——HashMap——1、基础
2021/9/18 11:04:54
本文主要是介绍java——HashMap——1、基础,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1.1.1 *概念*
对于 HashMap 及其子类而言,它们采用 Hash 算法来决定集合中元素的存储位置。当系统开始初始化 HashMap 时,系统会创建一个长度为 capacity 的 Entry 数组(即key-value数组),默认capacity长度是16,
这个数组里可以存储元素的位置被称为“桶(bucket)”,每个 bucket 都有其指定索引,系统可以根据其索引,快速访问该 bucket 里存储的元素
1.1.1 *Java8中HashMap有什么样的优化*
jdk8对hashMap增加了红黑树
JDK7中HashMap采用的是位桶+链表的方式。而JDK8中采用的是位桶+链表/红黑树的方式,当某个位桶的链表的长度超过8的时候,这个链表就将转换成红黑树。因为引入了树,所以其他操作也更复杂了,比如put方法以前只要通过hash计算下标位置,判断该位置有没有元素,如果有就往下遍历,如果存在相同的key就替换value,如果不存在就添加。但是到了8以后,就要判断是链表还是树,如果是链表,插入后还要判断要不要转化成树。不过这些操作都是常量级别的,复杂度还是O(1)的,但是对整体性能提升非常大。链表转换红黑树在treeify方法里实现,给树插入节点在puttreeval方法,修正红黑树是balanceInsertion方法,
1.1.1 put存值时,如果两个key对象的hashcode相同怎么办
根据hashcode找到对应的bucket之后,还会在对应的链表逐一检查这个链表里有没存在相同的key对象,这个时候是通过equals这个方法来对比的。
如果有,者用新的value取代旧的value。
如果没有,则在链表的尾部加上这个新的Entry对象
这篇关于java——HashMap——1、基础的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-11cursor试用出现:Too many free trial accounts used on this machine 的解决方法
- 2025-01-11百万架构师第十四课:源码分析:Spring 源码分析:深入分析IOC那些鲜为人知的细节|JavaGuide
- 2025-01-11不得不了解的高效AI办公工具API
- 2025-01-102025 蛇年,J 人直播带货内容审核团队必备的办公软件有哪 6 款?
- 2025-01-10高效运营背后的支柱:文档管理优化指南
- 2025-01-10年末压力山大?试试优化你的文档管理
- 2025-01-10跨部门协作中的进度追踪重要性解析
- 2025-01-10总结 JavaScript 中的变体函数调用方式
- 2025-01-10HR团队如何通过数据驱动提升管理效率?6个策略
- 2025-01-10WBS实战指南:如何一步步构建高效项目管理框架?