登录
  • #生活

Ha‌‌‍‍‌‍‍‌‍‍‌‍‍‌‍‍‌‌‌‍‌‍‍‌‍‍‌‌‌‌‌‌shMap vs HashTable 区别

techDiscussion
609
2
抛砖引玉

------------------------------------------------------------------------------------------------

第一、继承不同

第一个不同主要是历史原因。Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现。

而HashMap继承的抽象类AbstractMap实现了Map接口。

第二、线程安全不一样

Hashtable 中的方法是同步的,而HashMap中的方法在默认情况下是非同步的。在多线程并发的环境下,可以直接使用Hashtable,但是要使用HashMap的话就要自己增加同步处理了。

第三、允不允许null值

从上面的put()方法源码可以看到,Hashtable中,key和value都不允许出现null值,否则会抛出NullPointerException异常。

而在HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。当get()方法返回null值时,即可以表示 HashMap中没有该键,也可以表示该键所对应的值为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键, 而应该用containsKey()方法来判断。

第四、遍历方式的内部实现上不同

Hashtable、HashMap都使用了 Iterator。而由于历史原因,Hashtable还使用了Enumeration的方式 。

第五、哈希值的使用不同

HashTable直接使用对象的hashCode。而HashMap重新计算hash值。

第六、内部实现方式的数组的初始大小和扩容的方式不一样

HashTable中的hash数组初始大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。

---------->>> 为啥从没有见过有人用HashTable? 他存在于世界上的意义是什么?

有人知道么?
2条回复
热度排序

发表回复