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

为什么java.util.Set没有get(int index)?

微生承业
2023-03-14
问题内容

我确信这是有充分理由的,但是有人可以解释一下为什么java.util.Set缺少接口get(int Index)或任何类似get()方法吗?

集合似乎很适合放入东西,但我找不到从其中检索单个项目的优雅方法。

如果我知道我想要第一个项目,则可以使用set.iterator().next(),但否则似乎必须转换为数组才能在特定索引处检索项目?

集合中检索数据的适当方法是什么?(除了使用迭代器之外)

我敢肯定,将其排除在API中这一事实意味着有充分的理由不这样做-有人可以启发我吗?

编辑:
这里有一些非常好的答案,有的说“更多的上下文”。具体情况是dbUnit测试,在这里我可以合理地断言从查询返回的集合只有1个项目,而我试图访问该项目。

但是,如果没有这种情况,这个问题会更有效,因为它仍然更加集中:

set和list有什么区别

感谢所有以下出色的答案。


问题答案:

因为集合没有排序。有一些实现(尤其是那些实现java.util.SortedSet接口的实现),但这不是集合的一般属性。

如果您尝试通过这种方式使用集合,则应考虑改为使用列表。



 类似资料:
  • 问题内容: 我已经看到了有关根据索引值从中获取对象的其他问题,并且我理解为什么这是不可能的。但是我无法找到一个很好的解释,说明为什么不允许按对象获取,所以我想问一下。 有a作为后盾,因此从中获取对象应该非常简单。现在看来,我将不得不遍历中的每个项目并测试是否相等,这似乎是不必要的。 我可以只使用a,但不需要key:value对,我只需要一个。 例如说我有: 和: 是否因为equals方法用于测试“

  • 问题内容: 我知道Set中只允许根据.equals()的任何对象的一个​​实例,并且如果您已经有一个等效的对象,则不应“需要”从Set中获取一个对象,但是我仍然想有一个.get()方法,该方法返回给定等效对象作为参数的Set中对象的实际实例(或null)。 关于为什么这样设计的任何想法/理论? 我通常必须通过使用Map并使其键和值相同或类似的方法来解决这个问题。 编辑:到目前为止,我认为人们还不了

  • 问题内容: 我正在尝试做这样的事情: 不幸的是,即使在Java 9中也不存在。 为什么它被遗漏了? 建议的解决方法是什么? 问题答案: 为什么它被遗漏了? 该API提供了可重用的构建块。这里的相关积木是,,。通过这些,您可以实现所需的功能:将流内映射到对象,然后获得平面图。提供构建基块的排列是不切实际的,并且很难扩展。 建议的解决方法是什么? 如前所述,使用可用的构建基块(+ ):

  • 许多编译器都提供128位整数类型,但我使用过的编译器都没有提供typedefs。为什么? 据我回忆,标准 用于此目的的储量 鼓励提供此类类型的实现提供typedef 要求此类实现提供至少128位的intmax_t (而且,我不相信我使用了实际上符合最后一点的实现)

  • 我已经看到了关于基于索引值从中获取对象的其他问题,我明白为什么这是不可能的。但是我还没有找到一个很好的解释来解释为什么不允许获取对象,所以我想我会问。 HashSet由HashMap支持,因此从中获取对象应该非常简单。现在看来,我必须迭代HashSet中的每个项,并测试似乎不必要的相等性。 我可以只使用,但我不需要键:值对,我只需要一个。 例如,假设我有Foo。java: 和: 是不是因为equa

  • 我会给你一点背景。对于大多数操作,我很高兴,测试看起来相当稳定,有4s的隐式等待。 然而,有些时候我知道如果元素要显示在页面上,它已经存在了,所以如果例如我正在对元素列表进行操作,我希望驱动程序不要等待4s来决定每个元素它不在那里,继续前进。 所以当我可以设置驱动程序时。管理()。超时()。隐式wait(100,TimeUnit.millizes)并快速遍历列表,我想在解析完列表后将隐式wait设