HashMap和HashTable的区别
HashMap | HashTable |
---|---|
非线程安全 | 线程安全(大多数方法都加入了Sysnchornized关键字的,确保方法同步) |
可以接受空的key和value | 不能接受空的key和value |
异步执行(单线程环境下,HashMap的速度高于HashTable) | 同步执行 |
迭代器Iterator(快速失败) | 迭代器Enumeration(安全失败) |
HashMap的迭代器是Iterator(Fail-Fast),在遍历过程中若有其他线程对该HashMap进行增加或删除元素,则会抛出ConcurrentModificationException,因为快速失败的迭代器操作的是集合本身。
HashTable的迭代器是Enumeration(Fail-Safe),在遍历过程中若有其他线程对该HashTable进行增加或删除元素,不会抛出ConcurrentModificationException,因为安全失败的迭代器操作的是原集合的一个拷贝。
HashTable和ConcurrentHashMap的区别:
在进行迭代时,HashTable会锁住整个Map,而ConcurrentHashMap只会锁住Map的一部分,所以ConcurrentHashMap在多线程的环境下的性能更好。