线程安全
- HashMap是非线程安全的
- HashTable是线程安全的,内部方法基本都有synchronized修饰
效率
因为线程安全问题,HashMap比HashTable效率要高一点
null key 与null value
- HashMap中,null可以作为键,但有且只有一个,但是可以有多个null值
- HashTable里,键值里面只要输入进一个null,直接抛出NullPointerException
初始容量与扩容不同
- 创建时如果不指定容量初始值,HashTable默认初始大小为11,扩容变为原来的2n+1。HashMap默认初始值为16,扩容变为原来的2倍。
- 创建时如果指点容量初始值,HashTable直接使用给定的大小,而HashMap会将其扩充为2的幂次方大小。
底层数据结构
JDK1.8以后HashMap在解决哈希冲突有了较大的变化,当链表长度大于阈值(默认为8)时,将链表转化为红黑树,以减少搜索时间。HashTable
没这样的机制。