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]

更新於: 21-Jun-2020

5K+ 瀏覽

開啟你的 職業生涯

完成課程,即可獲得認證

開始
廣告
© . All rights reserved.