字符串键混合大写将覆盖Hashmap中的条目

时间:2013-10-10 10:37:55

标签: java string hashmap key overwrite

在以下代码中:

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

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

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

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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

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

enter image description here

并且

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

返回 false