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 千+ 瀏覽

開啟您的 職業生涯

完成課程,獲得認證

立即開始
廣告