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

回到顶部