HashMap面试题

2021-07-10  本文已影响0人  lannisiter

其实HashMap中的逻辑不算复杂,如果看懂了我之前对于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中put()的工作原理

img

6.HashMap 的底层数组长度为何总是2的n次方

HashMap根据用户传入的初始化容量,利用无符号右移和按位或运算等方式计算出第一个大于该数的2的幂。

1.8中做了哪些优化优化?

7.HashMap线程安全方面会出现什么问题

8. 为什么1.8改用红黑树

比如某些人通过找到你的hash碰撞值,来让你的HashMap不断地产生碰撞,那么相同key位置的链表就会不断增长,当你需要对这个HashMap的相应位置进行查询的时候,就会去循环遍历这个超级大的链表,性能及其地下。java8使用红黑树来替代超过8个节点数的链表后,查询方式性能得到了很好的提升,从原来的是O(n)到O(logn)。

上一篇下一篇

猜你喜欢

热点阅读