HashMap和HashTable区别

HashMap和HashTable区别:

HashMap最大的特点就是无序,原则上来讲并不存在下标的访问方式,只能通过Key来遍历。这也是为什么HashMap效率较高的原因。hash()函数(的算法效率很高)通过Key来查找元素。

hashMap的底层其实就是一个大的数组,Hash:哈希,散列表(就是乱的意思)。回答这个问题着重点记得在HashMap。
1.版本不同

HashMap:JDK1.2之后推出,是新的类。

HashTable:JDK1.0时推出,是旧的类。据说jdk1.8父类已被废除,用的自然少之又少。
两者作者可以忽略,感兴趣自行研究。代码略。自己去敲!

2.继承不同

public class HashMap  extends AbstractMap implements Map

public class Hashtable extends Dictionary implements Map

HashMap继承自AbstractMap类,而Hashtable继承自Dictionary类。但二者都实现了Map接口。

3.实现方式不同,HashMap非线程安全,HashTable线程安全

HashMap:采用异步处理方式,性能较高,非线程安全。允许设置NULL,null key和null value。

HashTable:采用同步的处理方式,性能较低,线程安全。


4.默认容量以及扩容大小不同

HashMap的初始容量为16,Hashtable初始容量为11,两者的填充因子默认都是0.75。
HashMap扩容时是当前容量翻倍即:capacity * 2,Hashtable扩容时是容量翻倍+1即:capacity * 2+1

5.对外提供的接口不同

HashMap没有contains方法,但是包括containsValue和containsKey方法;

Hashtable则保留了contains方法,效果同containsValue,还包括containsValue和containsKey方法。

Hashtable比HashMap多提供了elments() 和contains() 两个方法。

elments() 方法继承自Hashtable的父类Dictionnary。elements() 方法用于返回此Hashtable中的value的枚举。

contains()方法判断该Hashtable是否包含传入的value。它的作用与containsValue()一致。事实上,contansValue() 就只是调用了一下contains() 方法。

6.是否支持Null key 和Null value

Hashmap是允许key和value为null值的,用containsValue和containsKey方法判断是否包含对应键值对;重复的话就相当于修改覆盖。

HashTable键值对都不能为空,否则包空指针异常。


4.总结

相同点:HashMap和Hashtable的底层实现都是数组+链表结构实现

再问深的话博主也没办法了,只能自行去研究源码和设计者的设计理念了。

不过,答上以上几点基本过关没问题,只要你条理清晰,别让面试官感觉你含糊其辞,半知半懂就行。

其实,博主一直在想为什么面试官那么喜欢问HashMap和HashTable的区别?他们想听到的答案到底是什么?

HashTable早就没多少人用了,为什么还有人关注?其实面试官真正想面试的就是你到底实际中用没用过HashMap,用的时候有没有想过为什么要用它,说白了就是用的时候思考过其原理没有,不要只停留在会用而是知其然知其所以然,考察的是你在实际开发中有没有举一反三的能力,以小见大。

一个简单的面试题能看出面试者工作中很多的东西。大家想过吗,好好思考一下,你会收获更多。

hashmap

线程不安全,异步

允许有null的键和值

效率稍高

方法不是Synchronize的要提供外同步

有containsvalue和containsKey方法

HashMap 是Java1.2 引进的Map interface 的一个实现

HashMap是Hashtable的轻量级实现

hashtable

线程安全,同步

不允许有null的键和值

效率稍低

方法是是Synchronize的

有contains方法方法

Hashtable 继承于Dictionary 类 是JAVA1.0引进的

Hashtable 比HashMap 要旧

 

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值