如我们所知,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仍然使一个线程可以访问多个映射,从而提高了性能。 |