文章目录
-
- 一、关联文章
- 二、Question List
- 三、Answer 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 数据的可见性吗?为什么?
- 四、参考
一、关联文章
- HashMap(一) — HashMap 源码分析
- HashMap(二) — 浅析hash函数及tableSizeFor函数
- HashMap(三) — 高并发场景下的问题分析
- ConcurrentHashMap 源码分析(JDK1.7)
- ConcurrentHashMap 源码分析(JDK1.8)
二、Question List
- HashMap 的实现原理是什么,JDK1.7和JDK1.8有什么区别?
- HashMap 的 put 流程是什么?
- HashMap 的 put 方法是否支持 key/value 传 Null ?
- HashMap 在并发场景下是否线程安全?为什么?会产生什么问题?
- 如果要保证线程操作的安全,有其它方案吗?
- HashTable 的锁机制是什么?
- ConcurrentHashMap 和 HashTable 的效率哪个高,为什么?
- ConcurrentHashMap 的实现原理是什么?
- ConcurrentHashMap 在 JDK1.7 和 JDK1.8 的区别?
- ConcurrentHashMap 的 put 流程是什么?
- ConcurrentHashMap 的 get 流程是什么?
- ConcurrentHashMap 的 get 流程需要加锁吗,为什么?如果不需要加锁,是如何保证线程安全的?
- ConcurrentHashMap 的 put 方法是否支持 key/value 传 Null ?
- ConcurrentHashMap 的并发度是什么?
- ConcurrentHashMap 扩容时,如何保证可见性?
- 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 流程是什么?
<