在一些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知识性回答吗?更多相关内容,可以继续关注本站的常见问题专栏进行了解。