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),可以大大的提高查找性能。

posted @ 2022-07-17 16:17  Cloong  阅读(55)  评论(0)    收藏  举报