- 线程安全:HashMap是非线程安全的,Hashtable是线程安全的,Hashtable的方法基本都是经过synchronized修饰;
- 效率:HashMap要比Hashtable效率高一些;
- Null key和Null value:HashMap可以存储null key和value,只能有一个null key,null value可以有多个;Hashtable不允许有null key和null value,会拋出NullPointerException;
- 初始容量大小和扩容大小不同:
- 创建时不指定容量初始值:Hashtable默认初始大小为11,之后每次扩容变为原来的2n+1;HashMap默认的初始化大小为16,之后每次扩容为原来的2倍;
- 创建时指定容量初始值:Hashtable直接使用给定值,而HashMap会将其扩充为2的幂次方大小,也就是说HashMap总是使用2的幂作为哈希表的大小;
- 底层数据结构:JDK8以后HashMap在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为8)时将链表转化为红黑树,以减少搜索时间。
注意:本文归作者所有,未经作者允许,不得转载