我有一个 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) 上的相同键匹配。
这是我的问题:
这可能吗? Map 接口(interface)表示它使用 equals() 来比较键是否不为空。我没有在任何 SomeInterface 类中重写 equals() 。这是否意味着 equals 方法可能是错误的?
如果上述情况为真,那么如何让 HashMap 仅在 equals() 上返回 true(如果它们实际上是同一对象而不是副本)?这可以通过 if (object1 == object2) 来实现吗?在 Java 开发的早期,我被告知应该避免这样做,但我从未发现何时应该使用它。
提前致谢。 :)
最佳答案
我强烈怀疑您误诊了这个问题。如果您没有在任何地方重写equals
(并且您没有子类化任何其他重写equals
的东西),那么您确实应该具有“身份”行为。
说实话,如果我听到事实并非如此,我会感到震惊。
如果您可以制作一个简短但完整的程序来演示问题,这将使其更容易调查 - 但目前,我肯定会仔细检查您对看到不同内容的怀疑对象被视为相等的键。
关于java - 你能解释一下这个 Java HashMap 键冲突吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4335207/