java HashMap的内部实现原理?

单曲循环shield 发布于 2017/02/26 17:04
阅读 854
收藏 0

开源之夏第三届火热来袭,高校学生参与赢万元奖金!>>>

网上说当hashMap put()键值对进入容器时,如果key相同,则会放到一个链表?

真的是这样吗?

如果是这样的话那get(key)为什么不可以把多个值取出来?

加载中
0
天王盖地虎
天王盖地虎

答案在【Ctrl + 鼠标左键】

0
Barret_Guo
Barret_Guo

百度下hashMap  如何解决hash冲突。。

0
GestureWei
GestureWei

put会覆盖原有的值

GestureWei
GestureWei
你所查的资料说明的是key的hash值相同的话,会放入冲突链表,如果key相同,put会直接覆盖
0
我_承宇
我_承宇

通过 hash 值定位, hash 冲突进入 hash 链表

0
老菜鸟2022
老菜鸟2022

首先纠正一下你的错误描述 “key相同,则会放到一个链表?” ,key值不管相同与否,都会将value信息存在链表中,只是key值相同的话,会覆盖掉以前的value值。

 

简单粗暴地理解:HaspMap的底层是一个数组,每个数组索引下对应的是一个链表(jdk1.8之后加入了二叉树)。

 

如果key1和key2的索引值(基于hashcode)相同的话,value1和value2会被放到同一个索引下(数组下标)的链表中。在链表里再依次遍历,如果key1==key2,则直接覆盖掉相同的value,如果key1 !=key2 ,则新增一个节点放在链表中。

 

0
Charkey
Charkey
该评论暂时无法显示,详情咨询 QQ 群:点此入群
0
渔民小镇
渔民小镇

点进去看源码吧,没多少。

如果要举个例子来说明map,map相当于仓库,key就是票(物品存放坐标)、value就是货物。一票一货物。

假设往已有货物的key存放value,那么map会丢弃之前的货物。

0
x
xiao_小夭

hash相等的话会再次判断key是否相等, 如果不相等, 放在链表的头部

0
大大吊炸天
大大吊炸天
该评论暂时无法显示,详情咨询 QQ 群:点此入群
0
Ivann
Ivann

hash,key,value,这些概念先弄清楚..

hash相同放链表,读取的时候判断key

key相同,value就覆盖了

OSCHINA
登录后可查看更多优质内容
返回顶部
顶部