Advertisement

JDK1.8 HashMap resize() 容量扩容解析

阅读量:

1、准备知识

HashMap的底层数据结构

Java语言的基本数据结构主要包含两类:一类是数组(Array),另一类基于指针实现的数据结构(Object)。在JDK 1.8之前版本中,默认情况下HashMap采用数组+线性链表 的组合方式实现链表散列算法。从JDK 1.8开始对哈希冲突处理进行了优化,在哈希冲突发生时会根据具体情况进行不同的处理策略:当线性链表长度超过预设阈值(默认为8)时,则会将该线性链表转换为红黑树(Red-Black Tree)数据结构来实现高效的查找操作。这种改进显著缩短了平均搜索时间。

在这里插入图片描述

hash算法

致力于使HashMap的元素位置尽可能分散,并希望每个存储槽仅存一个元素以实现以下效果:通过哈希算法确定该存储槽后即可直接获取结果而无需遍历链表或红黑树结构。

HashMap中Key的hashCode值经过特定算法(称为hash函数)处理后生成唯一的数值标识。接着,在计算冲突时会采用(n-1) & hash的方式(其中n表示数组大小)来确定存储位置。当检测到当前插入项与已有项可能碰撞时,如果发现冲突,则需比较

全部评论 (0)

还没有任何评论哟~