HashMap和HashTable

HashMap我有单独写,就不在这里赘述了。

继承不同

HashMap和HashTable都实现了Map接口。但HashTable继承的是Directory类,HashMap继承的是AbstractMap。
这里写图片描述


这里写图片描述

注意: Directory是过时的类

This class is obsolete. New implementations should implement the Map interface, rather than extending this class.


线程安全

Hashtable方法是同步,而HashMap则不是。Hashtable 中的几乎所有的 public 的方法都是 synchronized 的,而有些方法也是在内部通过 synchronized 代码块来实现。

但HashTable这种类似悲观锁的做法以及Collections 类中的静态方法synchronizedMap()都不是很建议。建议使用ConcurrentHashMap来处理多线程下的map问题,ConcurrentHashMap引入了分段锁机制


对Null的处理

HashMap可以接受一个Null key,多个Null值。key为null的默认存储在数组的头部(HashMap 遇到 key 为 null 的时候,调用 putForNullKey 方法进行处理)。

1.先在table[0]的链表中寻找null key,如果有null key就直接覆盖原来的value,返回原来的value;
2.如果在table[0]中没有找到,就进行头插,但是要先判断是否要扩容,需要就扩容,然后进行头插,此时table[0]就是新插入的null key Entry了。

HashTable的key和value都不允许出现null,会抛NullPointerException


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值