JDK1.8中HashMap底层数据结构

Posted 本站大佬

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDK1.8中HashMap底层数据结构相关的知识,希望对你有一定的参考价值。

jdk1.8的HashMap底层是数组、链表、红黑树。
HashMap通过key的hashCode经过扰动函数处理后得到hash值,然后通过(n-1)&hash判断当前元素存放的位置(n是指当前数组的长度,在初始化一个HashMap的时候,规定这个HashMap数组的长度为16,0-15,数组容量不足时,会扩充,数组扩充因素为0.75,每当数组容量达到当前数组容量的最大容量*0.75时,这个数组就会扩容一倍。数组的最大容量为2的30次方,),如果当前位置存在元素的话,就判断该元素的hash值以及key是否相同,如果相同的话,直接覆盖,否者,就通过拉链法解决冲突。
当链表长度大于阈值(8)时,会调用treeifyBin方法。如果大于等于阈值,就会将链表转化为红黑树,当红黑树中节点小于等于6时,会住转换为链表(只有数组长度大于等于64的情况下,才会执行链表与红黑树的转换,否者只是执行resize方法对数组扩充)。

以上是关于JDK1.8中HashMap底层数据结构的主要内容,如果未能解决你的问题,请参考以下文章

Java面试必问之Hashmap底层实现原理(JDK1.8)

Java中HashMap底层实现原理(JDK1.8)源码分析

Java中HashMap底层实现原理(JDK1.8)源码分析

Java面试题HashMap的底层原理和线程安全的替代方案

HashMap底层实现原理

jdk1.8源码解析:HashMap底层数据结构之链表转红黑树的具体时机