(1)HashMap方法没有synchronized修饰,线程非安全,HashTable线程安全;现在HashTable在开发中很少很少使用。如果你要保证线程安全,推荐使用ConcurrentHashMap
(2)HashMap允许key和value为null,而HashTable不允许。
(3)单线程环境下HashMap效率要比HashTable效率高。
(4)初始容量和扩充容量不同。
- HashMap创建的时候如果不指定容量大小,初始容量大小为16,之后每次扩充,容量变为原来的2倍;
- HashTable创建的时候如果不指定容量大小,初始容量大小为11,之后每次扩充,容量会变为2n + 1;
(5)底层数据实现采用 数组+链表的形式
jdk8开始HashMap链表高度到8、数组长度超过64,链表转变为红黑树,元素以内部类Node节点存在



