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 到新数组