希望有人能解释为什么我无法从 HashSet
中检索元素。
Consider my HashSet
containing a list of MyHashObjects
with their hashCode()
and equals()
methods overridden correctly.
我希望做的是自己构建一个 MyHashObject
,并将相关的哈希码属性设置为特定值。我可以使用 contains()
方法查询 HashSet
以查看集合中是否存在“等效”对象。因此,即使 contains()
为 2 个对象返回 true,它们也可能不是 ==
true。
那么为什么没有 get()
方法类似于 contains()
的工作原理?
有兴趣了解此 API 决策背后的想法
原文由 DJ180 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果您知道要检索的元素是什么,那么您已经拥有了该元素。给定一个元素,
Set
唯一要回答的问题是它是否contains()
它与否。如果你想迭代元素,只需使用
Set.iterator()
。听起来您要做的是为元素的等价类指定规范元素。您可以使用
Map<MyObject,MyObject>
来执行此操作。请参阅 此 SO 问题 或 此 问题进行讨论。如果您真的确定要找到一个元素
.equals()
您的原始元素具有您必须使用HashSet
的约束,我认为您坚持迭代它并检查equals()
你自己。 API 不允许您通过其哈希码获取内容。所以你可以这样做:蛮力和 O(n) 丑陋,但如果那是你需要做的……