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

Java 字符串键混合大写将覆盖Hashmap中的条目,java,string,hashmap,key,overwrite,Java,String,Hashmap,Key,Overwrite,在以下代码中: HashMap<String, Integer> hm = new HashMap<String, Integer>(); hm.put("Driller", 0); hm.put("Planner", 1); HashMap hm=newhashmap(); hm.put(“司钻”,0); hm.put(“规划师”,1); “计划员”条目覆盖“司钻”。它们各自的哈希代码明显不同。如果键是小写的(“driller”和“planner”),那么put可以

在以下代码中:

HashMap<String, Integer> hm = new HashMap<String, Integer>();
hm.put("Driller", 0);
hm.put("Planner", 1);
HashMap hm=newhashmap();
hm.put(“司钻”,0);
hm.put(“规划师”,1);
“计划员”条目覆盖“司钻”。它们各自的哈希代码明显不同。如果键是小写的(“driller”和“planner”),那么put可以正常工作。但是,由于项目内部的不同原因,不可能更改关键案例

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


你知道发生了什么事,我如何解决它吗?

它不是最重要的。这只是更改记录的顺序,因为您正在使用hashmap。它会根据给定字符串键的哈希值自动排序。输出您的映射并查看结果。

只是关于hashmaps的注释。即使两个键的哈希代码相同,也不会覆盖任何内容。要覆盖该值,键必须与
equals
方法相等。

是正确的。
我早些时候发表了评论,但等着看其他人的答案&最后决定用图片发布。
调试后

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

返回false

当我在添加这两个条目后尝试SOP映射时,得到了以下输出-{Planner=1,Driller=0}。我没有看到
司钻
计划者
覆盖@R.J:相同。是的。没问题。你是说订单变更吗?试试这个答案,在回答中说这是一个评论有点奇怪。如果你想写评论,那么你应该这样做。但你“评论”的内容是正确的。如果你通过提供OP可能看到的更多细节来扩展它,那么你就有了一个非常好的答案。
"Driller".hashCode() == "Planner".hashCode()