- xiaoxin
- 等级:
- 性别:
- 文章: 65
- 积分: 330
- 来自: 长春
|
情况是这样的
一个空的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");就好了。
这是什么情况?
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
返回顶楼 |
|
|
- Tyrion
- 等级: 初级会员
- 性别:
- 文章: 43
- 积分: 50
- 来自: 南京
|
不是吧,怎么会有这种问题,我自己写了例子跑了一下是对的啊。testHM.get("a")能取到值的。
|
返回顶楼 |
|
|
- hotmob
- 等级: 初级会员
- 性别:
- 文章: 1
- 积分: 60
- 来自: 北京
|
测试可以,楼主胡说八道
|
返回顶楼 |
|
|
- xiaoxin
- 等级:
- 性别:
- 文章: 65
- 积分: 330
- 来自: 长春
|
好吧,我承认这个不是我真实的程序,我只是拿这个做例子说明了,我没有亲自测试这个例子,我以为和我的情况是一样的那。
我的程序本身太长没法放上去,看上去是这个情况。取size是3个,但是取之前放里面的键取不到了。当时没有测试序列化hashmap的主键。现在再现不了了。
|
返回顶楼 |
|
|
- liubey
- 等级:
- 性别:
- 文章: 224
- 积分: 160
- 来自: 大连
|
你放在map里的key是个对象?你重写hashcode跟toString了吗
|
返回顶楼 |
|
|
- arthur8
- 等级: 初级会员
- 性别:
- 文章: 8
- 积分: 30
- 来自: 北京
|
HashMap是根据key的hashcode值做散列的。~ 如果没有override equals&hashcode方法,你的那个写法应该没有问题
|
返回顶楼 |
|
|
- wooyon
- 等级: 初级会员
- 性别:
- 文章: 6
- 积分: 40
- 来自: XT
|
使用JDK中的HashMap,就算你重写了key的hashCode也不可能出现这种情况:重写hashCode只可做到,两份相同的key内容存到两个不同的位置,如果key内容不同是绝无可能相覆盖的。一定是你其它地方的问题
|
返回顶楼 |
|
|
- white_crucifix
- 等级:
- 性别:
- 文章: 230
- 积分: 110
- 来自: 杭州
|
xiaoxin 写道 好吧,我承认这个不是我真实的程序,我只是拿这个做例子说明了,我没有亲自测试这个例子,我以为和我的情况是一样的那。
我的程序本身太长没法放上去,看上去是这个情况。取size是3个,但是取之前放里面的键取不到了。当时没有测试序列化hashmap的主键。现在再现不了了。
问题就是我们都不知道你的代码在 size和取值中间还有没有发生其他事情……
如果你size()了3个,下一行代码立刻去取值,发现取不到,建议你把map里的内容打出来(或者dubug)看一下到底有些什么东西
如果中间还有其他动作,再研究下会不会有别的原因
|
返回顶楼 |
|
|
- anjingdeyiwang
- 等级: 初级会员
- 性别:
- 文章: 1
- 积分: 30
- 来自: 青岛
|
遇到了同样的问题,查了一下发现 变量定义成全局的了
|
返回顶楼 |
|
|