面试知识点—(HashMap与Hashtable区别)

HashMap和Hashtable的区别

  • 继承的父类不同。HashMap继承自AbstractMap类,而Hashtable继承自Dictionary类。但二者都实现了Map接口。
    在这里插入图片描述
  • HashMap不是线程安全的,Hashtable是线程安全的,Hashtable采用synchronized关键字保证方法的线程安全特性。
    在这里插入图片描述
  • HashMap允许key&value为空值,Hashtable不允许key&value为空值,否则会抛出空指针异常(如上图2所示)
  • 都是通过hash来进行索引,但是hash处理方式不同。HashMap索引方式为hash(key.hashCode()) % (len-1),Hashtable的索引计算方式为key.hashCode() & 0x7FFFFFFF % len。两种不同的计算方式,直接导致扩容策略也有所差异。
    在这里插入图片描述
  • 初始化、扩容策略不同。
    HashMap初始容量为16,当超过75%容量时,自动2倍扩容。
    Hashtable初始容量为11,当超过75%容量时,自动2倍+1扩容。
    在这里插入图片描述 在这里插入图片描述

额外得分点

  • 说出JDK8对于HashMap的优化,当链表长度大于8时,采用红黑树的实现。如下图所示:
    在这里插入图片描述
  • 说出如何实现HashMap的线程安全。采用Collections工具类的synchronizedMap()方法,实现HashMap的线程安全。或使用ConcurrentHashMap代替HashMap(引导其进入ConcurrentHashMap的实现问题中来,接下来又可以胡吹一波了)。
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值