【发布时间】:2010-07-28 20:35:54
【问题描述】:
我在尝试在java.util.HashMap 中查找密钥时遇到了一些奇怪的行为,我想我遗漏了一些东西。代码段基本上是:
HashMap<Key, Value> data = ...
Key k1 = ...
Value v = data.get(k1);
boolean bool1 = data.containsKey(k1);
for (Key k2 : data.keySet()) {
boolean bool2 = k1.equals(k2);
boolean bool3 = k2.equals(k1);
boolean bool4 = k1.hashCode() == k2.hashCode();
break;
}
那个奇怪的 for 循环之所以存在,是因为对于一个特定的执行,我碰巧知道data此时只包含一个项目,它是k1,实际上是bool2,@ 987654326@ 和 bool4 在该执行中将被评估为 true。但是,bool1 将被评估为false,而v 将为空。
现在,这是一个更大程序的一部分——我无法在更小的样本上重现错误——但在我看来,无论程序的其余部分做什么,这种行为都不应该发生。
编辑:我已手动验证哈希码在对象插入地图和查询它的时间之间没有发生变化。我会继续检查这个场地,但还有其他选择吗?
【问题讨论】: