1.讲下对HashMap的认识

HashMap的底层是数组+链表+红黑树

存储的是键值对(key-value)关系,采用链表法处理哈希冲突

属于线程不安全的数据结构,在多线程中可以使用HashTable、ConcurrentHashMap替代

2.为什么HashMap的长度必须是2的n次幂?

在计算存储数组索引的时候,需要用key的哈希值进行取余操作,由于计算机没有取余的运算,会被转换为其他的操作运算,提高了复杂度。而当HashMap长度为2的n次幂,会满足公式(n-1) & hash == hash % n,就可以用位运算取代余运算,计算更高效。

3.HashMap 为什么在获取 hash 值时要进行位运算

4.HashMap在JDK1.7和JDK1.8中有哪些不同? HashMap的底层实现

5.HashMap的put方法的具体流程?

6.HashMap 的 get 方法的具体流程?

7.HashMap的扩容操作是怎么实现的?

8.HashMap 在扩容时为什么通过位运算 (e.hash & oldCap) 得到下标?

9.链表升级成红黑树的条件

10.红黑树退化成链表的条件

11.HashMap是怎么解决哈希冲突的?

12.HaspMap的初始化时数组长度和加载因子的约束范围

Categories:

Tags:

No responses yet

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

🛡️ 闽ICP备2024065179号-3