面试题:HashMap & ConcurrentHashMap

一、关联文章

二、Question List

  1. HashMap 的实现原理是什么,JDK1.7和JDK1.8有什么区别?
  2. HashMap 的 put 流程是什么?
  3. HashMap 的 put 方法是否支持 key/value 传 Null ?
  4. HashMap 在并发场景下是否线程安全?为什么?会产生什么问题?
  5. 如果要保证线程操作的安全,有其它方案吗?
  6. HashTable 的锁机制是什么?
  7. ConcurrentHashMap 和 HashTable 的效率哪个高,为什么?
  8. ConcurrentHashMap 的实现原理是什么?
  9. ConcurrentHashMap 在 JDK1.7 和 JDK1.8 的区别?
  10. ConcurrentHashMap 的 put 流程是什么?
  11. ConcurrentHashMap 的 get 流程是什么?
  12. ConcurrentHashMap 的 get 流程需要加锁吗,为什么?如果不需要加锁,是如何保证线程安全的?
  13. ConcurrentHashMap 的 put 方法是否支持 key/value 传 Null ?
  14. ConcurrentHashMap 的并发度是什么?
  15. ConcurrentHashMap 扩容时,如何保证可见性?
  16. ConcurrentHashMap 中修饰 Node<K,V>[] table 的 volatile 关键字可以保证 Node.value 数据的可见性吗?为什么?

三、Answer List

1. HashMap 的实现原理是什么,JDK1.7和JDK1.8有什么区别?

数据结构:
JDK1.7:数组 + 链表
JDK1.8:数组 + 链表 + 红黑树 (链表长度超过8转红黑树)

查询效率:
JDK1.7:当某一hash值碰撞频繁时,会导致链表过长,从而降低了查询效率O(n)。
JDK1.8:为了优化上述的问题,JDK1.8 引入了红黑树来提高查询效率(logn)。

2. HashMap 的 put 流程是什么?

<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值