HashMap 的底层数据结构是什么?

HashMap 的底层数据结构是什么?

在JDK1.7 中,由"数组+链表"组成:数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的。

在JDK1.8 中,由"数组+链表+红黑树"组成:当链表过长,则会严重影响 HashMap 的性能,红黑树搜索时间复杂度是 O(logn),而链表是糟糕的 O(n)。因此,JDK1.8 对数据结构做了进一步的优化,引入了红黑树,链表和红黑树在达到一定条件会进行转换:

● 当链表长度 > 8 && 数组长度 >= 64 才会转红黑树; 其实这种情况,发生的概率很低。

● 将链表转换成红黑树前会判断,如果当前数组的长度小于 64,那么会选择先进行数组扩容 ,而不是转换为红黑树,以减少搜索时间。因为,数组扩容在一定程度上也可以减少哈希冲突如的发生。

相关推荐
小霞在敲代码8 天前
HashMap - 底层原理
java·hashmap
工一木子1 个月前
HashMap源码深度解析:从“图书馆“到“智能仓库“的进化史
java·源码·hashmap
小咪一会1 个月前
JVM 基础
jvm·1024程序员节
一叶难遮天1 个月前
Android面试指南(八)
java·设计模式·数组·hashmap·string·android面试·匿名内部类
空灵之海1 个月前
Ubuntu系统安全合规配置
linux·ubuntu·系统安全·1024程序员节
阿啄debugIT1 个月前
装饰(Decorator)模式可以在不修改对象外观和功能的情况下添加或者删除对象功能
软件工程·1024程序员节
最初的↘那颗心2 个月前
Java HashMap深度解析:原理、实现与最佳实践
java·开发语言·面试·hashmap·八股文
暮乘白帝过重山2 个月前
解剖HashMap的put <三> JDK1.8
java·数据结构·hashmap·暮乘白帝过重山
lzb_kkk3 个月前
【实习总结】Qt通过Qt Linguist(语言家)实现多语言支持
开发语言·c++·qt·1024程序员节·qt linguist·qt 语言家
Yangy_Jiaojiao3 个月前
三维手眼标定
1024程序员节