
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 这个属性是为了链表的实现
本文深入解析HashMap的数据结构,包括其内部实现的数组和链表,解释了如何通过键值对存储数据,处理hash冲突,以及扩容机制。了解HashMap的初始化过程,负载因子的作用,和Entry对象的结构。
1452

被折叠的 条评论
为什么被折叠?



