HashMap和HashTable

HashMap 和 HashTable的区别

1.HashTable 是集成的Dictionary 类,而hashMap 是集成的AbstractMap 类。
2.另外HashMap 支持null ,因为HashMap对null 做了特殊处理,为null 的话,hashcode设置为0
3.HashTable初始大小为11,每次扩充后为2n+1,而HashMap初始大小为16,每次为原来的2倍。也就是说HashTable会尽量使用素数、奇数。而HashMap则总是使用2的幂作为哈希表的大小。我们知道当哈希表的大小为素数时,简单的取模哈希的结果会更加均匀,所以单从这一点上看,HashTable的哈希表大小选择,似乎更高明些。但另一方面我们又知道,在取模计算时,如果模数是2的幂,那么我们可以直接使用位运算来得到结果,效率要大大高于做除法。所以从hash计算的效率上,又是HashMap更胜一筹,所以,事实就是HashMap为了加快hash的速度,将哈希表的大小固定为了2的幂。当然这引入了哈希分布不均匀的问题,所以HashMap为解决这问题,又对hash算法做了一些改动
4.我们说HashTable是同步的,HashMap不是,也就是说HashTable在多线程使用的情况下,不需要做额外的同步,而HashMap则不行,因为HashTable在Get和Set分别做了同部锁

你可能感兴趣的:(HashMap和HashTable)