hashmap底层原理

1 HashMap的内部数据结构

数组 + 链表/红黑树

 

2 HashMap允许空键空值么

HashMap最多只允许一个键为Null(多条会覆盖),但允许多个值为Null

 

3 影响HashMap性能的重要参数

初始容量:创建哈希表(数组)时桶的数量,默认为 16 负载因子:哈希表在其容量自动增加之前可以达到多满的一种尺度,默认为 0.75

 

4 HashMap的工作原理

HashMap是基于hashing的原理,我们使用put(key, value)存储对象到HashMap中,使用get(key)从HashMap中获取对象

 

5 HashMap为什么要引入红黑树

引入红黑树数据结构是为了解决链表O(n)的时间复杂度,由于链表不支持索引,要想在链表中找一个元素就需要遍历一遍链表,那显然效率是比较低的。达到一定条件时(链表长度8),链表就会转变红黑树。


6 扩容

数组容量是有限的,如果数据多次插入并到达一定的数量就会进行数组扩容,也就是resize 方法。如果当前存入的数据数量大于 Capacity * LoadFactor 的时候,就会进行数组扩容 resize。就比如当前的 HashMap 的最大容量大小为 100,当你存进第 76 个的时候,判断发现需要进行 resize了,那就进行扩容。

1)Capacity:HashMap 当前最大容量/长度

2)LoadFactor:负载因子,默认值0.75f

扩容 resize 分为两步

1)扩容:创建一个新的 Entry/Node 空数组,长度是原数组的 2 倍

2)ReHash:遍历原 Entry/Node 数组,把所有的 Entry/Node 节点重新 Hash 到新数组

 

posted @ 2022-11-29 12:17  NingShare  阅读(37)  评论(0编辑  收藏  举报