当前位置: 首页 > 面试题库 >

Java:从HashSet检索元素

左丘楷
2023-03-14
问题内容

希望有人能解释为什么我无法从中检索元素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中是否有一种方法,只需指定开始索引和结束索引,即可将对象列表从Arraylist获取到另一个ArrayList? 问题答案: 是的,您可以使用以下方法: 这将返回原始列表那部分的视图,它不会复制数据。 如果要复制:

  • 问题内容: 为什么第二和第三组保留顺序: 这是我得到的输出: 问题答案: 第二个(仅使用)只是一个巧合。从JavaDocs: 此类实现Set接口,该接口由哈希表(实际上是HashMap实例)支持。它不保证集合的迭代顺序。 特别是,它不能保证顺序会随着时间的推移保持恒定 。此类允许使用null元素。 第三个()设计为: Set接口的哈希表和链表实现,具有可预测的迭代顺序。此实现与HashSet的不同

  • Java中用于检索未排序整数数组中元素的索引的内部数据查询是什么。 不使用任何集合类型进行检索的过程是什么?

  • 主要内容:1 什么是Java HashSet,2 List和Set的区别,3 Java HashSet的层次结构,4 Java HashSet的语法,5 Java HashSet的构造方法,6 Java HashSet的方法,7 Java HashSet的例子,8 Java HashSet排除重复元素,9 Java HashSet删除元素,10 用Collection构造HashSet1 什么是Java HashSet Java HashSet类用于创建使用哈希表进行存储的集合。它继承了Abst

  • 问题内容: 因此,如果我尝试在迭代时从Java HashSet中 删除元素,则会收到 ConcurrentModificationException 。如下例所示,从 HashSet中 删除元素子集的最佳方法是什么? 这是一个解决方案,但我认为它不是很优雅: 谢谢! 问题答案: 您可以手动遍历集合的元素: 您通常会使用循环而不是循环来查看此模式: 正如人们指出的那样,使用循环是优选的,因为这样可以

  • 问题内容: 我是XML的新手。我想根据请求名称阅读以下XML。请帮助我了解如何以Java读取以下XML 问题答案: 如果你的XML是字符串,则可以执行以下操作: 如果你的XML在文件中,Document document则将被实例化为: 在document.getDocumentElement()返回你是文档的文档元素节点(你的情况 )。 一旦有了rootElement,就可以访问元素的属性(通过