在上一个博客中提到了hashmap,HashMap是基于哈希表实现的,内部通过链表或红黑树解决哈希冲突问题。容量不足时,会进行2的幂次方扩容,但是非常重要的一点就是HashMap并不是线程安全的,只能使用在单线程下,如果要使用在多线程下,就要采用jdk1.5引入的concurrent包下的concurrentHashMap。
这篇博客主要就是介绍HashMap、HashTable 、ConcurrentHashMap的区别和联系。
HashMap是继承自AbstractMap类,而HashTable是继承自Dictionary类。不过它们都实现了同时实现了map、Cloneable(可复制)、Serializable(可序列化)这三个接口,都创建了一个继承自Map.Entry的私有的内部类Entry。HashMap遍历使用的是Iterator迭代器;HashTable遍历使用的是Enumeration列举;
ConcurrentHashMap是由Segment数组结构和HashEntry数组结构组成
一、HashMap和HashTable
HashTable产生于JDK1.1, HashMap产生于JDK1.2。两者主要的区别有:
1.是否线程安全
HashMap是非线程安