关于hashmap

  • HashMap的底层数据结构?

数组加键值对,数组默认都为null,新增是计算key的hash值找到数组的位置保存,下一个如果hash如果已存在,则会形成链表

  • HashMap的存取原理?

新增,key和链表长度hash计算得出数组的位置,存放

取值,key和链表长度hash计算得出数组的位置,如果key相等则返回,否则查询链表。

  • Java7和Java8的区别?

jdk7 使用头插法 ,jdk 8 是尾插法,当链表超过阀值会转换成红黑树

  • 为啥会线程不安全?

如果是1.7使用头插法,同时多个线程进行插入操作,resize会导致循环链表,就是infineloop。

  • 有什么线程安全的类代替么?

concurrenthashmap hashtable

  • 默认初始化大小是多少?为啥是这么多?为啥大小都是2的幂?

16 保证2的幂是确保进行位运算是减少hash冲突,保证链表的均匀分布

  • HashMap的扩容方式?负载因子是多少?为什是这么多?

默认扩张为单前数组的两倍,根据key进行重新hash分布, 0.75 过大会频繁冲突,过小会浪费内存

  • HashMap的主要参数都有哪些?

默认初始化大小,超过会进行resize

最大容器大小

默认的负载因子

转换红黑树的阀值

取消红黑树的阀值,即当链表的数目小于这个数是转化为链表而不是红黑树

MIN_TREEIFY_CAPACITY:链表树化的一个标准,前面说过当数组槽内的元素数量大于8时可能会转化为红黑树,之所以说是可能就是因为这个值,当数组的长度小于这个值是,会先去进行扩容,扩容之后就有很大的可能让数组槽内的数据可以更分散一些了,也就不用转化数组槽后的存储结构了。当然,长度大于这个值并且槽内数据大于8时,那就老老实实的转化为红黑树吧。

  • HashMap是怎么处理hash碰撞的?

根据key值计算索引位置,比较key值,如果相同则覆盖并放回旧值,如果不同则存放于当前节点的下一个链表。

  • hash的计算规则?

key  & (length-1)

 

posted @   cheakceep  阅读(93)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示