HashTable和HashMap的区别:
1 该类实现了一个哈希表,HashTable的key和value都不可以为null。HashMap中key和value均可为null。
2 HashTable默认初始容量11,负载因子0.75;HashMap默认初始容量16,负载因子0.75。Hashtable不要求底层数组的容量一定要为2的整数次幂,扩容后的大小: old+old+1;而HashMap则要求一定为2的整数次幂,扩容后的大小: old+old。
3 HashTable 是线程安全的(因为它每个方法中都加入了Synchronize),HashMap是非线程安全的。
4 Hashtable计算hash值,直接用key的hashCode(),而HashMap重新计算了key的hash值,Hashtable在求hash值对应的位置索引时,用取模运算,而HashMap在求位置索引时,则用与运算。
HashTable类图结构:
HashMap 类图结构:
HashTable底层实现原理跟HashMap基本相同,可参考我的博客 HashMap深度解析
提醒:
HashTable被改造为实现Map接口,使其成为成员Java Collections Framework 。 如果不需要线程安全的实现,建议使用HashMap代替Hashtable 。 如果需要线程安全的并发实现,那么建议使用ConcurrentHashMap代替Hashtable 。