聚合全网技术文章,根据你的阅读喜好进行个性推荐
开源之夏第三届火热来袭,高校学生参与赢万元奖金!>>>
网上说当hashMap put()键值对进入容器时,如果key相同,则会放到一个链表?
真的是这样吗?
如果是这样的话那get(key)为什么不可以把多个值取出来?
答案在【Ctrl + 鼠标左键】
百度下hashMap 如何解决hash冲突。。
put会覆盖原有的值
通过 hash 值定位, hash 冲突进入 hash 链表
首先纠正一下你的错误描述 “key相同,则会放到一个链表?” ,key值不管相同与否,都会将value信息存在链表中,只是key值相同的话,会覆盖掉以前的value值。
简单粗暴地理解:HaspMap的底层是一个数组,每个数组索引下对应的是一个链表(jdk1.8之后加入了二叉树)。
如果key1和key2的索引值(基于hashcode)相同的话,value1和value2会被放到同一个索引下(数组下标)的链表中。在链表里再依次遍历,如果key1==key2,则直接覆盖掉相同的value,如果key1 !=key2 ,则新增一个节点放在链表中。
点进去看源码吧,没多少。
如果要举个例子来说明map,map相当于仓库,key就是票(物品存放坐标)、value就是货物。一票一货物。
假设往已有货物的key存放value,那么map会丢弃之前的货物。
hash相等的话会再次判断key是否相等, 如果不相等, 放在链表的头部
hash,key,value,这些概念先弄清楚..
hash相同放链表,读取的时候判断key
key相同,value就覆盖了
答案在【Ctrl + 鼠标左键】
百度下hashMap 如何解决hash冲突。。
put会覆盖原有的值
通过 hash 值定位, hash 冲突进入 hash 链表
首先纠正一下你的错误描述 “key相同,则会放到一个链表?” ,key值不管相同与否,都会将value信息存在链表中,只是key值相同的话,会覆盖掉以前的value值。
简单粗暴地理解:HaspMap的底层是一个数组,每个数组索引下对应的是一个链表(jdk1.8之后加入了二叉树)。
如果key1和key2的索引值(基于hashcode)相同的话,value1和value2会被放到同一个索引下(数组下标)的链表中。在链表里再依次遍历,如果key1==key2,则直接覆盖掉相同的value,如果key1 !=key2 ,则新增一个节点放在链表中。
点进去看源码吧,没多少。
如果要举个例子来说明map,map相当于仓库,key就是票(物品存放坐标)、value就是货物。一票一货物。
假设往已有货物的key存放value,那么map会丢弃之前的货物。
hash相等的话会再次判断key是否相等, 如果不相等, 放在链表的头部
hash,key,value,这些概念先弄清楚..
hash相同放链表,读取的时候判断key
key相同,value就覆盖了