Java:从HashSet检索元素
希望有人能解释为什么我无法从中检索元素HashSet
。
考虑我HashSet
包含正确地覆盖MyHashObjects
了它们hashCode()
和equals()
方法的列表。
我希望做的是构造一个MyHashObject
我自己,并将相关的哈希码属性设置为某些值。我可以查询该方法,HashSet
以查看集合中是否存在“等效”对象contains()
。因此,即使contains()
两个对象返回true,它们也可能不是==
真实的。
为何没有get()
类似的方法contains()
呢?
有兴趣了解此API决策背后的想法
回答:
如果知道要检索的元素,那么您已经有了该元素。Set
给定一个元素,答案的唯一问题是它是否contains()
存在。
如果要迭代元素,请使用Set.iterator()
。
听起来您要尝试的是为元素的等价类指定一个规范元素。您可以使用Map<MyObject,MyObject>
来执行此操作。
如果您真的确定要找到一个元素,该.equals()
元素必须具有您必须使用的约束,那么HashSet
我认为您一直在遍历它并检查equals()
自己。该API不允许您通过其哈希代码来获取某些东西。因此,您可以执行以下操作:
MyObject findIfPresent(MyObject source, HashSet<MyObject> set){
if (set.contains(source)) {
for (MyObject obj : set) {
if (obj.equals(source))
return obj;
}
}
return null;
}
蛮力和O(n)丑陋,但是如果那是您需要做的…
以上是 Java:从HashSet检索元素 的全部内容, 来源链接: utcz.com/qa/425191.html