Java 中 HashMap 和 ConcurrentHashMap 的区别


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

 HashMapConcurrentHashMap
同步的HashMap 不是同步的。ConcurrentHashMap 是同步的。
线程安全HashMap 不是线程安全的。ConcurrentHashMap 是线程安全的。
迭代器类型HashMap 迭代器是快速失败的,如果在迭代期间发生并发修改,ArrayList 会抛出 ConcurrentModificationException。ConcurrentHashMap 是安全的,在迭代期间永远不会抛出 ConcurrentModificationException。
空值HashMap 允许键和值为空。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")) {
            //removal is allowed.
            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("Removal not allowed.");
            }
         }
      }
      System.out.println(copyOnWriteArrayList);
   }
}

输出

[A, B, C]
[A, B]
[A, B, C]
Removal not allowed.
[A, B, C]

更新于:2020 年 6 月 21 日

5K+ 次浏览

开启您的 职业生涯

完成课程获得认证

开始
广告