1. 程式人生 > >HashMap,HashTable和ConcurrentHashMap的區別

HashMap,HashTable和ConcurrentHashMap的區別

一、HashMap與HashTable的區別:

1.HashMap是非執行緒安全的,HashTable是執行緒安全的,HashTable中的很多方法都是加了sysnchronized關鍵字的,確保了方法的同步;

2.HashMap可以接受空key和value,而HashTable不能接受空key和value;

3.由於HashMap是非同步執行,而HashTable是同步執行,所以在單執行緒環境下,HashMap的速度高於HashTable;

4.HashMap的迭代器採用的是Iterator,Iterator是快速失敗(Fail-Fast),在遍歷過程中若有其他執行緒對該HashMap進行增加或者刪除元素,則會丟擲ConcurrentModificationException,因為快速失敗的迭代器是操作的集合本身,

HashTable的迭代器是Enumeration,Enumeration是安全失敗(Fail-Safe),在遍歷過程中若有其他執行緒對該集合進行增加或則刪除元素,不會丟擲ConcurentModificationException,因為安全失敗的迭代器操作的是原集合的一個拷貝。

二、HashTable和ConcurrentHashMap的區別:

在進行迭代時,HashTable會鎖住整個Map,而ConcurrentHashMap只鎖住Map的一部分,所以ConcurrentHashMap在多執行緒環境下的效能更好。

三、如何讓HashMap實現同步功能?

Map m = Collections.synchronizeMap(hashMap);