map集合

本文深入解析HashMap的数据结构,包括其内部实现的数组和链表,解释了如何通过键值对存储数据,处理hash冲突,以及扩容机制。了解HashMap的初始化过程,负载因子的作用,和Entry对象的结构。

145842_pUvA_3618851.png

    hashMap的特性   

        通过键值对来存储  允许空的键和值  线程非安全的

    原理         位置概念  bucket概念   hash

        hashing    使用put(key,value)来存储 当存储时会根据键的hashcode值取bucket中寻找对应的位置

          当取值时get(key)方法  根据键的hash值找到对应的位置取出entry对象

    碰撞时

        当两个键对象的hashcode相同时  那么它们的bucket位置也相同 就会 发生碰撞  当发生时 hashMap的处理方式是将碰撞的Map.entry对象存入linkdList中

        当取值时两个键的hashCode相同时 会根据键的hashCode值取linkdList中使用keys.eques方法逐个比较 知道找到正确的对象

 

 

map集合在初始化时是一个entry数组    数组的长度为16  负载因子为 0.75

    map集合实现用了两种基础数据结构   数组和链表    数组和链表为嵌套关系    如果key不出现 hash一直eq不一致的情况 那么每一个数组下的链表内就只会有一个entry对象   如果出现了这种情况 链表就会添加数据  也就是说  

     数组每一个角标下都是一个链表集合,当hash值相同eq不相同时 就会继续在链表内添加数据

                 如果都相同时 那么新的替代就得entry对象返回旧的value  

当数组内的对象个数 (指entry'个数(每个角标下可能挂载多个entry),而不是数组的占用数)  超过了 数组长度 * 负载因子时 数组就会进行扩容  每次扩展一倍容量

 

    entry   是一个静态类  属性有 key  value  next   这个属性是为了链表的实现        

    hashMap的特性   

        通过键值对来存储  允许空的键和值  线程非安全的

    原理         位置概念  bucket概念   hash

        hashing    使用put(key,value)来存储 当存储时会根据键的hashcode值取bucket中寻找对应的位置

          当取值时get(key)方法  根据键的hash值找到对应的位置取出entry对象

    碰撞时

        当两个键对象的hashcode相同时  那么它们的bucket位置也相同 就会 发生碰撞  当发生时 hashMap的处理方式是将碰撞的Map.entry对象存入linkdList中

        当取值时两个键的hashCode相同时 会根据键的hashCode值取linkdList中使用keys.eques方法逐个比较 知道找到正确的对象

 

 

map集合在初始化时是一个entry数组    数组的长度为16  负载因子为 0.75

    map集合实现用了两种基础数据结构   数组和链表    数组和链表为嵌套关系    如果key不出现 hash一直eq不一致的情况 那么每一个数组下的链表内就只会有一个entry对象   如果出现了这种情况 链表就会添加数据  也就是说  

     数组每一个角标下都是一个链表集合,当hash值相同eq不相同时 就会继续在链表内添加数据

                 如果都相同时 那么新的替代就得entry对象返回旧的value  

当数组内的对象个数 (指entry'个数(每个角标下可能挂载多个entry),而不是数组的占用数)  超过了 数组长度 * 负载因子时 数组就会进行扩容  每次扩展一倍容量

 

    entry   是一个静态类  属性有 key  value  next   这个属性是为了链表的实现        

转载于:https://my.oschina.net/u/3618851/blog/1588489

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值