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)上的相同键.
所以这是我的问题:
这可能吗?Map接口说它使用equals()来比较键是否为空.我没有在任何SomeInterface类中重写equals().这是否意味着equals方法可能是错误的?
如果上述情况属实,那么如果HashMap实际上是同一个对象而不是副本,我怎么才能让它在equals()上返回true?这是否可以通过说if(object1 == object2)?我早期在Java开发中被告知我应该避免这样做,但我从未发现应该何时使用它.
提前致谢.:)
我强烈怀疑你误诊了这个问题.如果你没有equals
在任何地方覆盖(并且你没有继承任何其他覆盖的东西equals
)那么你应该确实有"身份"行为.
老实说,听到事实并非如此,我会感到震惊.
如果你可以制作一个简短但完整的程序来证明这个问题,那么这将使人们更容易研究 - 但目前,我绝对会仔细检查你对看到不同对象被视为同等密钥的怀疑.
归档时间: |
|
查看次数: |
2039 次 |
最近记录: |