【发布时间】:2020-06-09 12:30:51
【问题描述】:
正如标题所示,我的问题与重写 hashCode() 和 equals() 方法有关。但是,这也不完全正确,我只是不知道用另一种方式来总结我的问题。
我有一个对象Label,它包含多个组件,其中一个是List,它包含多个Node 类型的对象。 Label 的一个示例是:[(n1, n2, n3), (n4, n5)]。我想存储在LinkedHashSet 中生成的所有唯一Label 对象。但是,这并没有按预期工作。假设LinkedHashSet 当前包含上述Label,并且我们现在生成了一个名为other 的新Label,结果证明它包含与已添加标签相同的节点,因此也包含[(n1, n2, n3), (n4, n5)]。由于它具有相同的节点列表,Label 中的其他组件也相同。我不会在这里解释为什么,只是假设它是,因为事实就是如此。但是,当检查LinkedHashSet 是否已经包含Label 时,它会返回false,因为对象具有不同的对象ID。
一种方法是在 LinkedHashSet 上编写一个 for 循环,并将新标签与 LinkedHashSet 中的所有标签进行比较,但这在运行时间方面会非常昂贵,所以我正在寻找一个更便宜的选择。欢迎提出任何建议!
另一种方法是调整 equals() 方法,但这行不通,因为我还必须调整 hashCode() 方法,但我不知道如何更改它才能使其正常工作。
【问题讨论】:
-
hashCode或equals是否已在Label上被覆盖?除非这些被覆盖,否则将使用hashCode的默认实现,它对应于对象标识。 -
不清楚您的问题与标准“如何在 Java 中覆盖 equals 和 hashCode?”有什么区别
-
缓存
Label对象的哈希码会提供很好的效率。 -
@kaya3 OP 不确定覆盖
equals和hashCode实际上是他(或她)问题的解决方案。
标签: java equals contains hashcode