HashMap 的源码解析

HashMap概述

继承关系:
Map
    --- HashMap

HashMap 基于哈希表的Map接口的实现.采用Key-Value形式,并且运行为null.线程不安全;不保证顺序恒久不变
Map map = Collections.syschronizedMap(new hashMap());可以使得线程安全

.HashMap 的数据结构

我的理解: 基于一段可扩展的数组,通过各自元素key的hashCode通过离散的形式放入数组.同时,为了解决hash冲突,1.数组会扩展;2.冲突元素会分流;3.每个数组位置使用链表或者红黑树的形式存放多个元素.
如何避免或者解决hash冲突,提高效率,就是hashMap的精髓.

HashMap的图解

images

  1. 存在一个长度len的数组,可以存放元素;
  2. 同时元素之间可以通过链表或者红黑树关联;
  3. 通过hash(key)%len的方式决定存放数组的位置;
  4. hash冲突的时候使用链表或者红黑树共用个数组里面
  5. 数组通过一定策略可以拓展,每次增加一倍,然后进行元素对半分流
HashMap 的实现源码

HashMap 里面实现一个Enrty,其重要属性有key,value,next;
所以HashMap 的一个线性数组就是Entry[],同时单向链表

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值