我已经创建了哈希映射,当我调试它时,我看到我有重复键。
我没有覆盖hashCode()
&密钥中的equals(Object obj)
- Object1
我想知道它会如何影响地图搜索的性能?
private HashMap<Object1,Object2> map = new HashMap<Object1,Object2>();
答案 0 :(得分:4)
地图中不可能有重复的密钥,您有不同的“显示”相同的密钥(可能基于他们的toString()
?),因为您没有覆盖equals()
和{{ 1}},但实际上键是不同的。
这意味着为了从您的Map获取所有值,您需要保留您创建的每个键并将其存储在某个地方,这对我来说无法实现地图。
摘要:
覆盖hashCode()
和equals()
,然后将您的键/值对放入地图中。
答案 1 :(得分:0)
它不会给你带来糟糕的表现(更多相反),但它会阻止你的对象被视为重复。
如果希望将每个实例视为不同的键,请不要覆盖equals和hashCode方法。但这意味着您需要完全相同的实例才能在地图中检索您的值。
如果要使用其他实例检索值(例如,使用相同的id),则需要覆盖这些方法。
但问题不是表演问题。
答案 2 :(得分:0)
你怎么能有重复的钥匙?您并没有覆盖equals()
hashcode()
,因此您不能说&#34;重复的对象&#34;,因为这正是这些方法的目的。您可能调试并查看了不同的值,但对于JVM,它们不等于默认的Object.equals()
和Object.hashcode()
(实际上是最接近的超类)
答案 3 :(得分:0)
您不能拥有重复键,但您可以拥有重复值。你可能会对关键和价值感到困惑。