跳至正文
Line's Blog
Line's Blog
  • 首页
  • 关于
  • 归档
  • 相册
  • 首页
  • 关于
  • 归档
  • 相册
关

搜索

  • https://www.facebook.com/
  • https://twitter.com/
  • https://t.me/
  • https://www.instagram.com/
  • https://youtube.com/
Subscribe
Java

001-Java 中 HashMap 的原理

头像
作者 Line
2026年5月31日 1 分钟阅读
0

HashMap底层是一个数组,结合链表和红黑树来解决冲突。
主要有这3点:
1)怎么存
存一个Key-Value 时,先算Key 的hashCode,然后用(table.length-1)& hash 算出应该放在数组的哪个下标位置。

2)冲突了怎么办
两个不同的Key算出来下标一样,就叫哈希冲突。HashMap的解决办法是用链表把它们串起来,JDK8做了优化,如果同一个下标下的链表超过8个节点(且数组长度大于等于64),就转成红黑树,查找速度从O(n)变成O(logn)。

3)扩容机制
数组长度是有限的,存多了会挤。HashMap有个负载因子默认0.75,数组用了75%就自动扩容,把数组大小翻倍,然后把所有数据重新算位置放到新数组里。这个操作叫rehash,比较耗性能,所以初始化时最好给个预估容量。

头像
作者

Line

关注我
其他文章
上一个

初夏

下一个

002-为什么JDK1.8对HashMap进行了红黑树的改动?

暂无评论!成为第一个。

发表回复 取消回复

您的邮箱地址不会被公开。 必填项已用 * 标注

近期文章

  • 公寓租赁平台
  • 001-Spring Boot是如何实现自动配置的?
  • 005-MySQL 并发事务中会出现的三大问题
  • 004-MySQLInnoDB引擎中的聚簇索引和非聚簇索引有什么区别?
  • 003-MySQL索引的最左前缀匹配原则

归档

  • 2026 年 6 月
  • 2026 年 5 月

分类

  • Java
  • Linux
  • MySQL
  • Spring Boot
  • 生活
  • 项目

网站信息

  • 0
  • 3
  • 1
  • 101
  • 3
Copyright © 2026 Line - Powered by WordPress
粤ICP备2026067359号