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

Dar*_*oar 1 java set

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

为什么没有选项可以从Set中返回任何值?

它在现实生活中有很多意义.例如,我有一碗草莓,我想只拿一个.我完全不在乎哪一个.

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

Ste*_*n C 5

这不是负责任的.您必须询问Java集合框架的原始设计者.

一个可能的原因是具有非确定性行为的方法往往存在问题:

  • 它们使单元测试更加困难.
  • 他们使bug更难追查.
  • 对于那些没有费心阅读API文档的程序员来说,它们更容易被误解和误用.

对于基于散列表的集合组织,"获取某些元素"方法的行为将是非确定性的,或者至少难以确定/预测.

顺便说一下,你可以通过以下方式获得非空集的一些元素:

Object someObject = someSet.iterator().next();
Run Code Online (Sandbox Code Playgroud)

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


在重新审视这一点时,我意识到还有另一个原因.它只是Set基于集合的数学概念,而数学集合中的元素没有顺序.谈论数学集的第一个元素是毫无意义的.