HashMap&ConcurrentHashMap 1.7和1.8区别

一、HashMap

(1)JDK1.7 

结构:

在JDK1.7版本中,HashMap的数据结构是由数组+链表组成

初始化:

当我们new 了一个HashMap之后,底层创建了一个默认大小为16的一维数组HashEntry[]table,负载因子默认为0.75.

put():

当执行put方法时,调用key所在类的HashCode()计算哈希值,经过和数组长度取模后得到在HashEntry数组的存放位置。

如果此位置为空,则key-value添加成功

如果此位置有元素,即该位置有一个元素或是多个以链表形式存在的元素,比较key和其他元素的哈希值,

        若哈希值和其他元素的不同,则以链表形式添加成功

        若哈希值和某个元素key的哈希值相同,则调用key所在类的equals()方法,若equals放回false,则添加成功,若返回true,则用新的value更新原value

get():

首先也是根据 key 计算出 hashcode,然后定位到具体的数组位置

若该位置是为链表,则遍历直到 key 及 hashcode 相等时候就返回值。

不是链表就根据key 及 hashcode是否相等来返回值

啥都没取到就直接返回 null

(2)JDK1.8

结构:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值