HashMap和ConcurrentHashMap之间的区别

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

在集合的所有其他实现中,哈希映射是将数据存储在键值对中的重要集合之一。在多线程环境中,还有一个集合的称为并发集合的实现,该集合与哈希映射的属性一起还允许在多线程环境中进行数据处理。

在这两个集合的内部实现的基础上,以下是重要的区别。

序号哈希映射并发哈希映射
1并发如上 ,这两个集合之间的主要区别是并发性HashMap不是线程安全的。另一方面,ConcurrentHashMap是线程安全的,适合在多线程环境中使用。
2实作Hashmap和ConcurrentHashmap在内部实现方式有所不同,因为Hashmap在其存储机制中没有段并将数据存储在键值对中的概念。另一方面,以这样的方式实现Concurerent HashMap,即在初始化时将并发HashMap划分为段数[默认为16]。ConcurrentHashMap允许相似数量(16)的线程同时访问这些段,以便在高并发期间每个线程在特定段上工作。
3介绍了HashMap是JDK 1.2中引入的另一方面,SUN Microsystem在JDK 1.5中引入了ConcurrentHashMap。
4空允许如上 ,在HashMap的情况下,键和值允许使用空值。另一方面,在并发HashMap中,键和值均不允许为null值,如果尝试为此类条目获取运行时异常,则说明为NullPointerException。
5同步化HashMap比并发HashMap更好,因为没有同步。另一方面,ConcurrentHashMap通过基于并发级别将整个Map划分为不同的分区并仅锁定特定部分而不是锁定整个Map来实现线程安全。
6性能我们可以通过将Hashmap包装在Collections.synchornizedMap(HashMap)上进行同步,这将返回一个几乎等同于Hashtable的集合,在此哈希表上的每个修改操作都锁定在Map对象上。如上 ,有必要使用Collections.SynchronizedMap()方法,这ConcurrentHashMap()是一个更好的选择,因为ConcurrentHashMap仍然使一个线程可以访问多个映射,从而提高了性能。