关于java:字符串键混合大写覆盖Hashmap中的条目

String key mixing uppercase overwrites entry in Hashmap

在以下代码中:

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

"Planner"条目覆盖"Driller"。 它们各自的哈希码明显不同。 如果键只是小写("司钻"和"计划"),那么放置正常。 但是,由于项目内部的不同原因,无法更改关键案例。

我使用JDK 7 Update 25 64位,但据我所知,String hashcode自早期版本以来一直非常稳定。

你知道发生了什么吗?我怎么能解决它?


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


这不是压倒性的。 它只是改变了记录的顺序,因为你使用的是hashmap。 它会根据给定字符串键的哈希值自动排序。 输出地图并查看结果。


穆斯塔法根? 是正确的。
我之前评论过,但是等着看其他答案&amp; 终于决定发布图片。
经过调试

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

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

enter image description here

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

返回false