1.13 HashMap和Hashtable的区别
- 从底层数据结构来看:HashMap在JDK1.8之前采用数组+链表的方式,在JDK1.8时采用数组+链表/红黑树的结构;而Hashtable一直是数组+链表的结构;
- 从线程安全上看:HashMap不是同步的,非线程安全;而Hashtable中有同步锁synchronized,线程安全;
- 从效率上看:Hashtable因为实现线程安全,效率不如HashMap;
- 从null值容忍度来看:HashMap最多容忍1条数据的key是null,多条数据的value是null;而Hashtable的key和value都不可以是null;
- 从初始容量来看:
如果没有指定初始值,HashMap默认大小是16,而Hashtable默认大小11;
如果指定了初始值,HashMap会创建的大小为2的指定幂次方(由tableSizeFor()保证),而Hashtable会按指定大小创建; - 从扩容上来看:HashMap会扩容成原来的2倍,而Hashtable会扩容成原来的2倍+1;