HashMap原理
HashMap原理属于常见面试题
简介 面试答案!!!
HashMap是用来存储键值对的一种集合,它基于哈希表的Map接口实现
HashMap继承与AbstractMap类和实现Map接口
HashMap在jdk1.7之前是由数组加链表组成的,在jdk1.8之后为了提高查询效率增加了红黑树这种数据结构。
当链表长度大于阈值(默认为8)和HashMap的数组长度超过64的时候就会使用到红黑树。
当删除元素时 红黑树的长度小于6时,会将红黑树转换成链表
原理
JDK7中的HashMap,是基于数组+链表来实现的,它的底层维护一个Entry数组。它会根据计算的hashCode将对应的KV键值对存储到该数组中,一旦发生hashCode冲突,那么就会将该KV键值对放到对应的已有元素的后面, 此时便形成了一个链表式的存储结构。
DK7中HashMap的实现方案有一个明显的缺点,即当Hash冲突严重时,在桶上形成的链表会变得越来越长,这样在查询时的效率就会越来越低,其时间复杂度为O(N)。
JDK8中的HashMap,是基于数组+链表+红黑树来实现的,它的底层维护一个Node数组。当链表的存储的数据个数大于等于8的时候,不再采用链表存储,而采用了红黑树存储结构。这么做主要是在查询的时间复杂度上进行优化,链表为O(N),而红黑树一直是O(logN),可以大大的提高查找性能。

浙公网安备 33010602011771号