【发布时间】:2015-08-17 09:36:58
【问题描述】:
我正在尝试这个代码 sn-p
Map headers=new HashMap();
headers.put("X-Capillary-Relay","abcd");
headers.put("Message-ID","abcd");
现在,当我为其中一个键执行get 时,它工作正常。
但是我在 Eclipse 调试器上看到了一个奇怪的现象。
当我调试并进入变量并首先检查 table 条目时,我看到了这个
->table
--->[4]
------>key:X-Capillary-Relay
...........
但是在第二行调试后我得到了
->table
--->[4]
------>key:Message-ID
...........
它不会创建新条目,而是覆盖现有密钥。对于任何其他键,不会发生这种覆盖。地图的大小显示为 2。get 适用于两个键。那么eclipse调试器中这种差异背后的原因是什么。是日食问题吗?或哈希问题。 2 个键的哈希码不同。
【问题讨论】:
-
只要能用就没有问题,还是有?该映射不会为每个哈希值提供单独的存储桶,因此如果两者最终位于同一个存储桶中也没问题。此外,我很确定创建了一个新条目 - 否则您将如何从地图中检索这两个值?
-
如果代码工作和哈希值不同但 Eclipse 调试器显示地图内容不正确,那么它似乎是调试器的问题。
-
我建议把 HashMap 当作一个黑盒子——只要你明白它的作用,你就不需要了解它是怎么做的。 (但如果你使用任何对象作为键,请实现 hashCode() 和 equals())
标签: java eclipse dictionary hash hashmap