HashMap与Hashtable的区别

HashMap与Hashtable的区别

  1. Hashtable既不支持Null key也不支持Null value。
  2. HashMap和Hashtable底层都是使用数组加链表(在jdk1.8之后HashMap还使用了红黑树进一步提升存取效率)。
  3. HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null;。HashMap中插入key为null的键值对是会调用特定方法 putForNullKey,并且HashMap并不能使用get()方法来判断是否存在某个键 ,而是使用containsKey()来判断。
  4. HashMap是非线程安全的,Hashtable由于每个方法都有Synchronize关键字修饰所以是线程安全的,但效率低于HashMap,当对并发没有要求时推荐使用HashMap。当需要并发操作时推荐使用ConcurrentHashMap,因为其使用的分段锁在效率上比Hashtable高。
  5. HashMap初始容量16,之后的自动扩容为原来的2倍,Hashtable初始容量为11,之后每次扩容为之间2n+1,填充因子默认都为0.75。
  6. HashMap、Hashtable都使用了Iterator。HashMap的Iterator是fail-fast(快速失败模式)迭代器,当有其他线程改变了HashMap的结构(比如增删改元素)将会抛ConcurrentModificationException。但通过迭代器的remove()移除元素则不会,但这并不一定会发生,主要取决于JVM。
  7. HashMap计算hash对key的hashcode进行二次hash,获取更好的散列值,然后对table的数组长度取模;Hashtable直接使用key的hashcode对数组长度进行取模。

 

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值