Java基础-1 HashMap和Hashtable的区别

1 HashMap和Hashtable的区别

a) 从继承角度看

HashMap继承自AbstractMap类, Hashtable继承自Dictionary类. 但两者都实现了Map接口.
在这里插入图片描述

b) 从锁,线程安全性的角度看

HashMap中的方法没有加synchronized关键字,因此是线程不安全的
Hashtable中的方法加了synchronized关键字,因此是线程安全的

以put方法为例
在这里插入图片描述

c) 从contains相关方法角度看

HashMap中没有contains方法,只有containsKey跟containsValue,因为contains容易引起误解
Hashtable中保留了contains方法,效果等价于containsValue

HashMap
在这里插入图片描述

Hashtable
在这里插入图片描述contains相关方法测试
在这里插入图片描述

d) 从key value是否可以为null的角度看

HashMap允许key value出现null值,null作为key时候,只允许有一个,重复的null key对应的value会被覆盖
在这里插入图片描述
Hashtable中key value都不允许出现null
在这里插入图片描述在这里插入图片描述

e) 从遍历的角度看

HashMap,Hashtable都可以用Iterator进行迭代,Hashtable还可以用Enumeration进行迭代。

HashMap可以使用entrySet的迭代器进行迭代
在这里插入图片描述
HashMap也可以使用keySet的迭代器进行迭代
在这里插入图片描述
Hashtable可以用keySet,entrySet的iterator进行迭代外,还可以用Enumeration进行迭代
在这里插入图片描述在这里插入图片描述hashtable的keys进行Enumeration迭代

在这里插入图片描述hashtable的elements进行Enumeration迭代
在这里插入图片描述

f) 从计算hash值的角度看

HashMap的Hash值如果为null,那就是0,否则就是key的hashCode值与自己无符号右移16位后进行异或运算,可以让底层table数组的值分布的更加均匀。
在这里插入图片描述
Hashtable的hash值直接使用的对象key的hashCode
在这里插入图片描述

g) 从容量的角度看

HashMap的默认容量是16
在这里插入图片描述Hashtable的默认初始容量为11
在这里插入图片描述

HashMap扩容时,容量变为原来的2倍
在这里插入图片描述
Hashtable扩容时,容量变为原来的2倍+1

在这里插入图片描述HashMap要求底层数组table的容量为2的整数次幂
在这里插入图片描述
而Hashtable没有这要求
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值