你能解释一下这个Java哈希映射键冲突吗?

Bra*_*rad 0 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);
     }
}
Run Code Online (Sandbox Code Playgroud)

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

所以这是我的问题:

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

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

提前致谢.:)

Jon*_*eet 6

我强烈怀疑你误诊了这个问题.如果你没有equals在任何地方覆盖(并且你没有继承任何其他覆盖的东西equals)那么你应该确实有"身份"行为.

老实说,听到事实并非如此,我会感到震惊.

如果你可以制作一个简短但完整的程序来证明这个问题,那么这将使人们更容易研究 - 但目前,我绝对会仔细检查你对看到不同对象被视为同等密钥的怀疑.