ConcurrentHashMap 和 hashmap
时间: 2023-10-17 18:34:29 浏览: 86
ConcurrentHashMap和HashMap都是Java中常用的Map数据结构,但它们在实现和使用上有一些不同。
ConcurrentHashMap在JDK 1.7中的实现结构包括Segment(锁数组)、hashEntry(哈希数组)和链表(hashEntry节点)。Segment是对整个桶数组进行了分段,每个Segment都维护了一个独立的锁,这样不同的线程可以同时访问不同的Segment,从而提高了并发性能。hashEntry是存储实际键值对的数组,而链表则是用来解决哈希冲突的。
而HashMap则没有对整个桶数组进行分段,也没有使用锁来保证并发安全。它的底层实现结构只包括hashEntry和链表。在单线程环境下,HashMap的性能通常比ConcurrentHashMap好,因为它没有额外的并发控制开销。
当多个线程同时对ConcurrentHashMap进行操作时,每个线程只需要获取自己所对应的Segment的锁,这样不同线程之间的并发性能更高。而HashMap在多线程环境下,如果没有外部同步控制,可能会出现数据不一致的情况。
引用提供了ConcurrentHashMap在JDK 1.7中的实现结构。
引用提供了使用new()方法创建ConcurrentHashMap的示例。
引用提到了HashMap没有对整个桶数组进行分段的特点。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* [HashMap和ConcurrentHashMap](https://blog.csdn.net/jdk819/article/details/119846649)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *3* [ConcurrentHashMap与HashMap的区别](https://blog.csdn.net/qq_46130027/article/details/130905598)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
阅读全文