论坛首页 编程语言技术论坛

java HashMap存值巧遇,key不同但是却覆盖了之前的值

浏览 6502 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (3)
作者 正文
   发表时间:2013-09-27  

情况是这样的

一个空的HashMap testHM;

testHM.put("a","123");

testHM.put("b","456");

testHM.put("a.c","789");

 

取testHM的size是3,正确。

取里面的值,只剩下两个"b","456"  和"a.c","789"

这时候再取testHM.get("a");已经取不到了。

 

后来发现,是因为testHM.put("a.c","789");把之前的 a 的key给覆盖了。

 

testHM.put("a.c","789"); 改为testHM.put("a_c","789");就好了。

 

这是什么情况?

 

天真

 

 

 

 

   发表时间:2013-09-27  
不是吧,怎么会有这种问题,我自己写了例子跑了一下是对的啊。testHM.get("a")能取到值的。
0 请登录后投票
   发表时间:2013-09-28  
测试可以,楼主胡说八道
0 请登录后投票
   发表时间:2013-09-29  
好吧,我承认这个不是我真实的程序,我只是拿这个做例子说明了,我没有亲自测试这个例子,我以为和我的情况是一样的那。

我的程序本身太长没法放上去,看上去是这个情况。取size是3个,但是取之前放里面的键取不到了。当时没有测试序列化hashmap的主键。现在再现不了了。
0 请登录后投票
   发表时间:2013-09-29  
你放在map里的key是个对象?你重写hashcode跟toString了吗
0 请登录后投票
   发表时间:2013-10-01  
HashMap是根据key的hashcode值做散列的。~ 如果没有override equals&hashcode方法,你的那个写法应该没有问题
0 请登录后投票
   发表时间:2013-10-01  
使用JDK中的HashMap,就算你重写了key的hashCode也不可能出现这种情况:重写hashCode只可做到,两份相同的key内容存到两个不同的位置,如果key内容不同是绝无可能相覆盖的。一定是你其它地方的问题
0 请登录后投票
   发表时间:2013-10-02  
xiaoxin 写道
好吧,我承认这个不是我真实的程序,我只是拿这个做例子说明了,我没有亲自测试这个例子,我以为和我的情况是一样的那。

我的程序本身太长没法放上去,看上去是这个情况。取size是3个,但是取之前放里面的键取不到了。当时没有测试序列化hashmap的主键。现在再现不了了。



问题就是我们都不知道你的代码在 size和取值中间还有没有发生其他事情……

如果你size()了3个,下一行代码立刻去取值,发现取不到,建议你把map里的内容打出来(或者dubug)看一下到底有些什么东西

如果中间还有其他动作,再研究下会不会有别的原因
0 请登录后投票
   发表时间:2013-12-12  
遇到了同样的问题,查了一下发现 变量定义成全局的了
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics