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]
广告