HashMap对于key为非null时如何保证不会散列到0的位置?

zlp1992 2016-06-01 08:43:20
HashMap中对于key为null 时,直接存在0位置,对于key为非null 时,则调用indexFor()来找到存放的位置,所以问下,不会出现key为非null 时,indexFor返回0吗?我想应该是不会的,那么是怎么保证的?
...全文
374 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
看了楼主的问题之后突然想到了一个新的问题,《HashMap中对于key为null进行存储,如果有两个以上的key为null时是怎样存储的?》
对于楼主的问题我有一种想法,不知道是否正确,就是不论计算出的哈希值是多少,都按照put规则进行存储,在查找的时候也和其他值一样,应该不会有冲突发生吧
zlp1992 2016-06-02
  • 打赏
  • 举报
回复
引用 6 楼 qq_15915835 的回复:
就算计算出来的存储位置冲突了,会用链表来存Entry啊,找的时候找到找这个位置的Key就可以了。
是的,所以key不为null时其计算得到的位置是有可能为0的
qq_15915835 2016-06-02
  • 打赏
  • 举报
回复
就算计算出来的存储位置冲突了,会用链表来存Entry啊,找的时候找到找这个位置的Key就可以了。
zlp1992 2016-06-02
  • 打赏
  • 举报
回复
我想你们都有点没理解我的意思,我的意思是hash map中对于key为null时不会计算哈希,而是直接存放在位置为0,对于那些key非null,则会利用indexFor计算位置,这个计算得到的位置是否有可能为0?后面想了想是有可能的,这样便是0的位置处存放的有key为null和非null的数据,而其他位置只会存放key非null的数据
zlp1992 2016-06-02
  • 打赏
  • 举报
回复
引用 2 楼 平平定的回复:
我记得不错的话,key好象不能为null。 key应该唯一不重复。 如果散列计算冲突时,会排除冲突结点再计算。算法有几种,说不准了,你可以自己查。
hashmap中key和value都是可以为null的
woshiyexinjie 2016-06-02
  • 打赏
  • 举报
回复
看下冲突是怎么处理的 java源码
平平定 2016-06-02
  • 打赏
  • 举报
回复
我记得不错的话,key好象不能为null。 key应该唯一不重复。 如果散列计算冲突时,会排除冲突结点再计算。算法有几种,说不准了,你可以自己查。
yzx2015fd 2016-06-02
  • 打赏
  • 举报
回复
那就是哈希冲突啊,用AaBb,aAbb这样的字符串做key存一次试试吧,会形成一个链表。

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧