Java 中 HashTable 和 ConcurrentHashMap 之间的区别

javaobject oriented programmingprogramming更新于 2025/9/7 21:00:17

Concurrent Hashmap 是在 jdk1.5 中引入的一个类。并发哈希映射在添加或更新映射时仅在名为 fragment 的存储桶级别应用锁定。因此,并发哈希映射允许对映射进行并发读写操作。

HashTable 是在 Jdk1.1 中引入的一个线程安全的遗留类。它是 Map 接口的基本实现。它不允许空键和空值。它本质上是同步的,因此两个不同的线程不能同时访问。Hashtable 不维护任何顺序。

Sr.不。
Key
HashTable
ConcurrentHashMap

1

Basic 

HashTable 是 Jdk1.1 中引入的线程安全的遗留类

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

2

锁定

它对整个集合应用锁定 

ConcurrentHashMap 仅在名为 fragment 的 bucket 级别应用锁定  在添加或更新map

3

性能 

比 ConcurrentHashMap 慢

它比HashTable更好

4.

Null

它不允许为空的键和值

它允许为空的键和值

示例哈希表

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) {
      // 创建哈希表
      Hashtable map = new Hashtable();
      map.put("HCL", "100");
      map.put("DELL", "200");
      map.put("IBM", "300");
      // 打印映射
      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");
      // 打印映射
      for (Map.Entry m : map.entrySet()) {
         System.out.println(m.getKey() + " " + m.getValue());
      }
   }
}

相关文章


有用资源