Java中HashMap和ConcurrentHashMap之间的区别

以下是Java中HashMap和ConcurrentHashMap类之间的显着差异。

 哈希映射并发哈希映射
已同步HashMap不同步。ConcurrentHashMap已同步。
线程安全HashMap不是线程安全的。ConcurrentHashMap是线程安全的。
迭代器类型HashMap迭代器是快速失败的,并且如果在迭代过程中发生并发修改,则ArrayList会引发ConcurrentModificationException。ConcurrentHashMap是故障安全的,并且在迭代过程中永远不会抛出ConcurrentModificationException。
空值HashMap允许键和值为null。ConcurrentHashMap不允许使用空键/值。它将抛出NullPointerException。
性能HashMap更快。ConcurrentHashMap比HashMap慢。
从Java版本开始1.21.5

示例

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
public class Tester {
   public static void main(String[] args) {
      List<String> arrayList = new ArrayList<>();
      arrayList.add("A");
      arrayList.add("B");
      arrayList.add("C");
      Iterator<String> iterator = arrayList.iterator();
      System.out.println(arrayList);
      while (iterator.hasNext()) {
         if (iterator.next().equals("C")) {
            //允许删除。
            iterator.remove();
         }
      }
      System.out.println(arrayList);
      List<String> copyOnWriteArrayList = new CopyOnWriteArrayList<>();
      copyOnWriteArrayList.add("A");
      copyOnWriteArrayList.add("B");
      copyOnWriteArrayList.add("C");
      Iterator<String> iterator1 = copyOnWriteArrayList.iterator();
      System.out.println(copyOnWriteArrayList);
      while (iterator1.hasNext()) {
         if (iterator1.next().equals("C")) {
            try{
               iterator1.remove();
            }catch(UnsupportedOperationException e){
               System.out.println("不允许移除。");
            }
         }
      }
      System.out.println(copyOnWriteArrayList);
   }
}

输出结果

[A, B, C]
[A, B]
[A, B, C]
不允许移除。
[A, B, C]