Java集合面试题, 为什么 JDK 1.8 对 HashMap 进行了红黑树的改动?
Java集合面试题, 为什么 JDK 1.8 对 HashMap 进行了红黑树的改动?
QA
Step 1
Q:: 什么是 Java 集合框架?
A:: Java 集合框架是 Java 提供的一组类和接口,用于存储和操作一组数据。集合框架包括 List、Set、Map 等接口及其实现类,如 ArrayList、HashSet、HashMap 等。
Step 2
Q:: 为什么 JDK 1.8
对 HashMap 进行了红黑树的改动?
A:: 在 JDK 1.8 之前,HashMap 使用链表来处理哈希冲突,当哈希冲突较多时,链表长度变长,导致查找效率变低。JDK 1.8 引入了红黑树,当链表长度超过一定阈值时,链表转换为红黑树,从而将最坏情况下的查找时间复杂度从 O(n) 降低到 O(log n)
。
Step 3
Q:: 红黑树有什么特点?
A:: 红黑树是一种自平衡的二叉搜索树,具有以下特点:1) 每个节点要么是红色,要么是黑色。2) 根节点是黑色。3) 每个叶子节点(NIL 节点)是黑色。4) 如果一个节点是红色,则其两个子节点都是黑色。5)
从任一节点到其每个叶子节点的所有路径都包含相同数目的黑色节点。
Step 4
Q:: HashMap 的负载因子是什么?
A:: 负载因子(Load Factor)是 HashMap 中一个重要参数,它决定了哈希表在何时扩容。默认负载因子是 0.75,这意味着当哈希表填满到 75
% 时会进行扩容操作,以保持查找效率。
Step 5
Q:: HashMap 的初始容量是什么?
A:: HashMap 的初始容量是哈希表在创建时的容量大小,默认值是 16
。初始容量和负载因子共同决定了哈希表何时需要进行扩容。
Step 6
Q:: HashMap 和 Hashtable 的区别是什么?
A:: HashMap 和 Hashtable 都是实现了 Map 接口,但有以下区别:1) HashMap 是非同步的,Hashtable 是同步的。2) HashMap 允许一个 null 键和多个 null 值,Hashtable 不允许 null 键和 null 值。3) HashMap 引入于 JDK 1.2,Hashtable 是原始的 JDK 1.0
类。
Step 7
Q:: ConcurrentHashMap 是什么?
A:: ConcurrentHashMap 是一个线程安全的哈希表,它通过分段锁(Segment Locking)机制来实现高效的并发操作。相对于 Hashtable 和同步的 HashMap,它提供了更高的并发性和性能。