java中HashMap和HashTable的比较

On 八月 12, 2011, in 技术记录, by pensz

1 HashMap 和 HashTable 都是通过链接法解决碰撞

通过链接法解决碰撞,点击放大图片

链接解决碰撞,摘自算法导论第二版135页


2 HashMap 的hash函数更加牛一些,另外支持null的key(这其实是一个支不支持的问题)

3 javadoc中写道:除了不同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。从具体代码来看,HashMap代码的方法前面没有加synchronized,而HashTable的方法前面加了synchronized;另外,HashTable不支持null是“全面”的,key 和 value都不能为null

4 HashMap计算key对应的bucket(桶)所使用取模算法中,HashMap是二进制的 & (table.length – 1),而HashTable 是 % table.length,显然HashMap更加牛些

5 HashMap的查找,插入性能更加好,因为它中间会对key的hashCode再做一次hash,使其尽量均匀分布,而HashTable基本依赖于key的hashCode()

选择的原则:尽量使用HashMap,如果有同步方面的需求,自己可以在外面做控制。

Tagged with: