hashmap和hashtable区别是什么?有什么区别?

KLQ 2020-04-27 15:55:16 java常见问答 10649

在一些java面试的过程中,经常有人会遇到这个java面试题hashmap和hashtable区别是什么,下面一起来看看这个面试题的答案吧。

一、hashmap和hashtable区别

具体来说的话hashmap和hashtable一共有7个方面的不同,下面一一来介绍一下。

1、hash值不同

HashTable:直接使用对象的hashCode

HashMap:重新计算hash值

2、两个遍历方式的内部实现不同

Hashtable、HashMap两者都是使用了Iterator,但是,因为一些历史原因,Hashtable除了使用了Iterator之外,还使用了Enumeration。

3、是否提供contains方法

Hashtable:Hashtable和HashMap不同,它保留了contains、containsValue以及containsKey3个方法

HashMap:它去掉了Hashtable的contains方法,改为了containsKey和containsValue

4、内部实现使用的数组初始化和扩容方式不同

HashTable:在不指定容量的情况下的默认容量为11;不要求底层数组的容量一定要为2的整数次幂;扩容时将容量变为原来的2倍加1

HashMap:在不指定容量的情况下的默认容量为16;要求一定为2的整数次幂;扩容时,将容量变为原来的2倍

HashTable中hash数组默认大小是11,增加的方式是old*2+1

5、key和value是否允许null值

Hashtable:key和value都不允许出现null值

HashMap:null能够作为键,这样的键只有一个,能够有一个或者是多个键所对应的值为null

6、线程安全性不同

Hashtable:Synchronize;在多线程并发的情况下,能够直接使用Hashtable,不要自己为它的方法实现同步

HashMap:在缺省情况下是非Synchronize的;使用HashMap的时候就需要自己增加同步处理;HashMap是线程不安全的

7、继承的父类不同

Hashtable:继承Dictionary类

HashMap:继承AbstractMap类

以上就是对于hashmap和hashtable区别的介绍了!你都了解了吗?

想了解更多的java知识性回答吗?更多相关内容,可以继续关注本站的常见问题专栏进行了解。