相同点:
都是存储“键值对”的散列表,而且都是采用拉链法来实现的。存储的思想都是:通过table数组存储,数组的每个元素都是一个Entry,而一个Entry就是一个单项链表,Entry链表中的每个节点都保存了key-value数据。
不同点:
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()方法