第17题:HashMap的加载因子为什么是0.75而不是1或0.5
📚 回答:
-
背景知识 :
HashMap的加载因子(loadFactor)决定了数组在扩容前可以存储多少元素。默认值为0.75,这是在空间占用和查询性能之间的一个权衡值。 -
为什么不是1?
- 如果加载因子设为1,意味着数组会在完全装满时才触发扩容。
- 这样虽然节省了空间,但会导致哈希冲突的概率显著增加,链表长度变长,查询效率降低(时间复杂度从O(1)退化为O(n))。
-
为什么不是0.5?
- 如果加载因子设为0.5,意味着数组在只装了一半时就会触发扩容。
- 虽然减少了哈希冲突的概率,但会导致频繁扩容,占用更多的内存空间,影响性能。
-
为什么是0.75?
-
加载因子为0.75是一个经验值,在空间利用率和查询性能之间找到了平衡点:
- 空间利用率高:数组不会过早扩容,避免浪费内存。
- 查询性能优:哈希冲突的概率较低,链表长度较短,查询效率较高。
💡 面试官视角:
-
-
面试官可能会问"有没有场景需要调整加载因子?"答:在内存敏感的场景下可以适当增大加载因子(如0.8),而在性能敏感的场景下可以适当减小加载因子(如0.6)。
-
面试官可能会追问"加载因子对扩容有什么影响?"答:加载因子越小,扩容越频繁;加载因子越大,扩容越少,但冲突概率增加。
📌 专栏 :大白话说Java面试题 --- 01-Java基础篇