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
