Java 中 HashTable 和 ConcurrentHashMap 的区别


Concurrent Hashmap 是 jdk1.5 中引入的一个类。 Add 或 update map 时,Concurrent hash map 仅在称为 segment 的桶级别应用锁。因此,Concurrent hash map 允许对 map 进行并发读写操作。 

HashTable 是一个线程安全的传统类,它是在 Jdk1.1 中引入的。它是 Map 接口的基本实现。它不允许空键和空值。由于它具有同步特性,因此两个不同的线程不能同时访问它。HashTable 不维护任何顺序。

序号

HashTable
ConcurrentHashMap

1

基本 

HashTable 是一个线程安全的传统类,它是在 Jdk1.1 中引入的

 ConcurrentHashmap 是 jdk1.5 中引入的一个类

2

锁定

它在整个集合上应用锁 

Add 或 update map 时,ConcurrentHashMap 仅在称为 segment 的桶级别应用锁  

3

性能 

它比  ConcurrentHashMap 慢

它比 HashTable 好

4.

它不允许空键和空值

它允许空键和空值

HashTable 示例

import java.util.ArrayList;
import java.util.EnumMap;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;
public class HashtableExample {
   public static void main(String[] args) {
      // create Hashtable
      Hashtable map = new Hashtable();
      map.put("HCL", "100");
      map.put("DELL", "200");
      map.put("IBM", "300");
      // print the map
      for (Map.Entry m : map.entrySet()) {
         System.out.println(m.getKey() + " " + m.getValue());
      }
   }
}

ConcurrentHashMap 示例

import java.util.ArrayList;
import java.util.EnumMap;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public class ConcurrentHashMapExample {
   public static void main(String[] args) {
      // ConcurrentHashMap
      Map myMap = new ConcurrentHashMap();
      myMap.put("HCL", "1");
      myMap.put("DELL", "1");
      // print the map
      for (Map.Entry m : map.entrySet()) {
         System.out.println(m.getKey() + " " + m.getValue());
      }
   }
}

更新于: 2021-7-29

7 千+ 浏览

开启您的 职业生涯

完成课程,获得认证

立即开始
广告
© . All rights reserved.