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

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

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

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

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

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

相关推荐
开开心心就好11 天前
内存清理软件灵活设置,自动阈值快捷键清
运维·服务器·windows·pdf·harmonyos·risc-v·1024程序员节
学传打活13 天前
【边打字.边学昆仑正义文化】_5_宇宙物种创造简史(1)
微信公众平台·1024程序员节·汉字·昆伦正义文化
xcLeigh14 天前
打破机房围墙:VMware+cpolar构建跨网络虚拟实验室
vmware·内网穿透·cpolar·实验室·远程访问·1024程序员节
开开心心就好15 天前
免费轻量电子书阅读器,多系统记笔记听书
linux·运维·服务器·安全·ddos·可信计算技术·1024程序员节
unable code16 天前
流量包取证-大流量分析
网络安全·ctf·misc·1024程序员节·流量包取证
开开心心就好16 天前
实用PDF擦除隐藏信息工具,空白处理需留意
运维·服务器·windows·pdf·迭代器模式·桥接模式·1024程序员节
unable code17 天前
浏览器取证-[GKCTF 2021]FireFox Forensics
网络安全·ctf·misc·1024程序员节·浏览器取证
unable code17 天前
内存取证-[安洵杯 2019]Attack
网络安全·ctf·misc·1024程序员节·内存取证
unable code18 天前
CTF-SPCS-Forensics
网络安全·ctf·misc·1024程序员节·取证