Java集合面试题, 为什么 Java 中 HashMap 的默认负载因子是 0.75?
Java集合面试题, 为什么 Java 中 HashMap 的默认负载因子是 0.75?
QA
Step 1
Q:: Java集合面试题: 为什么 Java 中 HashMap 的默认负载因子是 0.75
?
A:: 在 Java 中,HashMap 的默认负载因子是 0.75,因为它在时间和空间之间提供了一个良好的平衡。负载因子表示在哈希表扩容之前,允许填充的百分比。0.75 的负载因子意味着当 HashMap 的填充率达到 75
% 时,哈希表会进行扩容。这有助于保持较低的碰撞率,同时避免频繁的扩容操作,从而提高了 HashMap 的性能。
Step 2
Q:: Java 集合面试题:
解释 HashMap 的工作原理。
A:: HashMap 基于哈希表实现,它使用哈希函数将键映射到桶数组中的索引。每个桶可以包含多个键值对(以链表或红黑树的形式存储),以处理哈希冲突。当一个新的键值对插入时,HashMap 计算键的哈希值,并将其存储在相应的桶中。如果桶中已经存在元素,则使用链表或红黑树存储这些冲突的键值对。通过这种方式,HashMap 能够在平均时间复杂度为 O(1)
的情况下进行插入和查找操作。
Step 3
Q:: Java 集合面试题:
HashMap 和 Hashtable 有什么区别?
A:: HashMap 和 Hashtable 都是基于哈希表的数据结构,但它们之间有一些关键区别。首先,HashMap 不是线程安全的,而 Hashtable 是线程安全的,因为它的方法是同步的。其次,HashMap 允许一个 null 键和多个 null 值,而 Hashtable 不允许任何 null 键或 null 值。最后,HashMap 的性能通常优于 Hashtable,因为它没有同步开销。
Step 4
Q:: Java 集合面试题:
解释 HashMap 的 rehashing 机制。
A:: 当 HashMap 的元素数量超过负载因子和容量的乘积时,它会进行 rehashing 操作,即扩容和重新分配桶。rehashing 涉及创建一个新的桶数组,其容量是旧数组的两倍,然后将所有现有元素重新分配到新桶中。重新分配是通过重新计算每个键的哈希值并将其存储到新桶中来完成的。这个过程确保了 HashMap 在高负载下仍能保持高效的性能。