0

在以下代码中:

HashMap<String, Integer> hm = new HashMap<String, Integer>();
hm.put("Driller", 0);
hm.put("Planner", 1);

“Planner”条目覆盖“Driller”。它们各自的哈希码显然不同。如果键只是小写(“driller”和“planner”),那么 put 可以正常工作。但是,由于项目内部的不同原因,无法更改关键案例。

我正在使用 JDK 7 Update 25 64 位,但据我所知,字符串哈希码自早期版本以来一直非常稳定。

你知道发生了什么,我该如何解决?

4

3 回答 3

1

只是关于哈希图的评论。即使两个键的哈希码相同,也不会被覆盖。equals对于要被覆盖的值的方法,键必须相等。

于 2013-10-10T11:19:32.380 回答
1

它不是压倒一切的。因为您使用的是 hashmap,所以它只是改变了记录的顺序。它自动按给定字符串键的哈希值排序。输出您的地图并查看结果。

于 2013-10-10T11:12:59.863 回答
0

Mustafa Genç是对的。
我之前评论过,但等着看其他人的答案,最后决定用图片发布。
调试后

HashMap<String, Integer> hm = new HashMap<String, Integer>();
hm.put("Driller", 0);
hm.put("Planner", 1);  

在最后一条语句之后,hm (HashMap) 有两个带键的元素,可以看到

在此处输入图像描述

"Driller".hashCode() == "Planner".hashCode()

返回

于 2013-10-10T13:07:39.533 回答