java - 为什么 java.util.Set 不能返回任何值?

标签 java set

java.util.Set 仅指定返回所有记录的方法(通过 Iterator 或数组)。

为什么没有从 Set 返回任何值的选项?

它在现实生活中有很大的意义。例如,我有一碗草莓,我想只吃一个。我完全不在乎是哪一个。

为什么我不能在 java 中做同样的事情?

最佳答案

这不是可以回答的。您必须询问 Java 集合框架的原始设计者。

一个似是而非的原因是具有不确定行为的方法往往有问题:

  • 它们使单元测试更加困难。
  • 它们使错误更难追踪。
  • 它们更容易被懒得阅读 API 文档的程序员误解和误用。

对于基于哈希表的集合组织,“获取某些元素”方法的行为将是不确定的,或者至少难以确定/预测。

顺便说一句,您可以按如下方式简单地获取非空集合的一些元素:

Object someObject = someSet.iterator().next();

获得一个真正的(伪)随机元素有点棘手/昂贵,因为您无法索引集合的元素。 (您需要将所有集合元素提取到一个数组中...)


在重新审视这个问题时,我意识到还有另一个原因。简单地说,Set 是基于集合的数学概念,而数学中集合的元素是没有顺序的。谈论数学集合的第一个元素根本没有意义。

关于java - 为什么 java.util.Set 不能返回任何值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9583094/

相关文章:

java - JAXB 返回 null 而不是空字符串

java - 是否可以从嵌套枚举中获取封闭实例?

java - 使用不同的外键 id 复制同一类的对象

functional-programming - 在 Erlang 中测试集合的相等性

python - 将列表转换为集合会改变元素的顺序吗?

java - 自定义 Jira 插件 : Cannot Update an issue

java - 加入两个大量的 PCollection 有性能问题

c++ - 在尝试使用递归查找集合的子集总数时,出现段错误

python - if 语句循环内短路

haskell - 具有给定顺序的无序数据类型集