Java 中 HashMap 和 ConcurrentHashMap 的區別
以下是 Java 中 HashMap 和 ConcurrentHashMap 類的顯著差異。
| HashMap | ConcurrentHashMap | |
|---|---|---|
| 同步的 | HashMap 不是同步的。 | ConcurrentHashMap 是同步的。 |
| 執行緒安全 | HashMap 不是執行緒安全的。 | ConcurrentHashMap 是執行緒安全的。 |
| 迭代器型別 | HashMap 迭代器是快速失敗的,如果在迭代期間發生併發修改,ArrayList 會丟擲 ConcurrentModificationException。 | ConcurrentHashMap 是安全的,在迭代期間永遠不會丟擲 ConcurrentModificationException。 |
| 空值 | HashMap 允許鍵和值為空。 | ConcurrentHashMap 不允許空鍵/值。它將丟擲 NullPointerException。 |
| 效能 | HashMap 速度更快。 | ConcurrentHashMap 比 HashMap 慢。 |
| 自 Java 版本 | 1.2 | 1.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]
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP