java - 你能解释一下这个 Java HashMap 键冲突吗?

标签 java hashmap collision

我有一个 HashMap 并按以下方式使用:

HashMap<SomeInterface, UniqueObject> m_map;

UniqueObject getUniqueObject(SomeInterface keyObject)
{
     if (m_map.containsKey(keyObject))
     {
         return m_map.get(keyObject);
     }
     else
     {
         return makeUniqueObjectFor(keyObject);
     }
}

我的问题是,我看到不同类的多个对象与 m_map.containsKey(keyObject) 上的相同键匹配。

这是我的问题:

  1. 这可能吗? Map 接口(interface)表示它使用 equals() 来比较键是否不为空。我没有在任何 SomeInterface 类中重写 equals() 。这是否意味着 equals 方法可能是错误的?

  2. 如果上述情况为真,那么如何让 HashMap 仅在 equals() 上返回 true(如果它们实际上是同一对象而不是副本)?这可以通过 if (object1 == object2) 来实现吗?在 Java 开发的早期,我被告知应该避免这样做,但我从未发现何时应该使用它。

提前致谢。 :)

最佳答案

我强烈怀疑您误诊了这个问题。如果您没有在任何地方重写equals(并且您没有子类化任何其他重写equals的东西),那么您确实应该具有“身份”行为。

说实话,如果我听到事实并非如此,我会感到震惊。

如果您可以制作一个简短但完整的程序来演示问题,这将使其更容易调查 - 但目前,我肯定会仔细检查您对看到不同内容的怀疑对象被视为相等的键。

关于java - 你能解释一下这个 Java HashMap 键冲突吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4335207/

相关文章:

c++ - Box2d strangly 不检测碰撞

python - pygame 坠落碰撞导致玩家上下振荡

java - 在没有 Grails 的普通 Spring MVC 中使用 GSP View

audio - 2D碰撞和背景音乐XNA 3.1

java - 直接来自 Clojure Repl 的 Browning javadoc

java - HashMap 中的平均跳数

java - 无法注册类(class)

go - 从 golang 中受限键范围内的映射生成的 slice 中随机选择元素。有 O(1) 的捷径吗?

java - 如何简化 token 预测 DFA?

java - Camel REST 服务在返回 null 时抛出异常