Hashtable
1.不允许key或value为空
2. 是线程安全的,所有public的方法都加了synchronized关键字
3. Hashtable的一个实例有两个参数影响其性能:初始容量(默认11)和负载因子(默认0.75)。所以建议:如果已知键值对的个数,最好设置其初始容量
HashMap
1.实现了Map接口,并且允许空值作为其键或值
2.不是线程安全的,所有public的方法都没有同步关键字
3. HashMap的一个实例有两个参数影响其性能:初始容量(默认16)和负载因子(默认0.75)。所以建议:如果已知键值对的个数,最好设置其初始容量(同Hashtable)
Hashtable和Hashtable的异同
同:
1、底层都是数组+链表实现
异:
1、Hashtable线程安全,HashMap线程不安全。
2、Hashtable不允许null值,HashMap允许null值。
3、Hashtable默认的初始容量是11,HashMap默认的初始容量是16。
4、Hashtable继承Dictionary类,HashMap实现Map接口。
HashMap的扩容
初始容量是16,加载因子是0.75。所以当hashmap的容量达到16*0.75=12时,hashmap会扩容;扩容后的长度是16*2=32