Java面试题——HashTable和HashMap区别

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/java_cjl/article/details/78518605

相同点:

都是存储“键值对”的散列表,而且都是采用拉链法来实现的。存储的思想都是:通过table数组存储,数组的每个元素都是一个Entry,而一个Entry就是一个单项链表,Entry链表中的每个节点都保存了key-value数据。


不同点:


1,继承方式不同:
HashMap继承与AbstractMap
HashTable继承与Dictionary
Dictionary是一个抽象类,它直接继承与Object类,没有实现任何接口。Dictionary是JDK1.0引入的,
虽然也支持添加键值对,获取value等基本操作,但是它的API比Map少,而且Dictionary议案是通过Enumeration去遍历,
Map则是通过Iterator去遍历。然而由于HashTable也实现了Map接口,所以它也支持Iterator遍历

2,线程安全不同:
HashMap的方法是非同步的
HashTable几乎所有方法都是同步的

3,对null值的处理不同:
HashMap的key和value都可以为null。
HashTable的key和value都不可以为null


4,支持的遍历种类不同:
HashMap只支持Iterator遍历
HashTable支持Iterator和Enumeration两种方式遍历


5,添加key-value的hash值算法不同:
HashMap添加元素时,是使用自定义的哈希算法
HashTable是直接采用key的hashCode()


6,部分API不同:
HashMap不支持contains(Object value)方法,没有重写toString()方法

HashTable支持contains(Object value)方法,而且重写了toString()方法



猜你喜欢

转载自blog.csdn.net/java_cjl/article/details/78518605