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()); } } }
廣告