HashMap 和 ConcurrentHashMap 之间的区别

javaobject oriented programmingprogramming更新于 2025/7/22 0:12:17

众所周知,Java 集合是保存数据的最重要的数据结构之一。集合中有多种实现,例如 Map、Set List 等,这使得它最适合用于数据存储和相应地操作,因为这些实现不仅使数据存储有效,而且还允许在多线程环境中处理数据。

在所有其他集合实现中,Hash Map 是将数据存储在键值对中的重要集合之一。在多线程环境中,还有一种称为并发集合的集合实现,它与 Hash Map 的属性一起还允许在多线程环境中处理数据。

根据这两个集合的内部实现,以下是重要的区别。

Sr.不。KeyHashMapConcurrentHashMap
1并发性如上所述,这两个集合之间的主要区别在于并发性 HashMap 不是线程安全的。另一方面,ConcurrentHashMap 是线程安全的,适合在多线程环境中使用。
2实现Hashmap 和 ConcurrentHashmap 的内部实现不同,因为 Hashmap 在其存储机制中没有段的概念,而是将数据存储在键值对中。另一方面,ConcurrentHashMap 的实现方式是,concurrentHashMap 在初始化时被划分为多个段 [默认 16]。 ConcurrentHashMap 允许相似数量 (16) 的线程同时访问这些段,以便在高并发性期间每个线程都处理特定的段。
3引入JDK 1.2 中引入了 HashMap另一方面,SUN Microsystem 在 JDK 1.5 中引入了 ConcurrentHashMap。
4允许为空如上所述,如果是 HashMap,则允许键和值为空。另一方面,在 Concurrent HashMap 不允许键和值都为空,如果尝试输入此类值,则会得到运行时异常 NullPointerException。
5同步HashMap 优于并发 HashMap,因为没有同步。另一方面,ConcurrentHashMap 通过将整个 Map 根据并发级别划分为不同的分区并仅锁定特定部分而不是锁定整个 Map 来实现线程安全性。
6性能我们可以通过将 Hashmap 包装在 Collections.synchornizedMap(HashMap) 上来同步 Hashmap,它将返回一个几乎等同于 Hashtable 的集合,其中 Map 上的每个修改操作都锁定在 Map 对象上。如上所述,需要使用 Collections.SynchronizedMap() 方法,然后 ConcurrentHashMap() 是更好的选择,因为 ConcurrentHashMap 仍然允许多个线程有机会访问映射,从而提高性能。

相关文章


有用资源