当scala.collection.TraversableLike#head在scala中可能返回不同的结果时?

o4tp2gmn  于 5个月前  发布在  Scala
关注(0)|答案(1)|浏览(54)

以下是引用自文档:
选择此可遍历集合的第一个元素。注意:除非基础集合类型是有序的,否则不同的运行可能返回不同的结果。返回:此可遍历集合的第一个元素。抛出:NoSuchElementException -如果可遍历集合为空。
看起来很奇怪。什么时候可以返回不同的结果?调用myMap.head两次安全吗?

e1xvtsh3

e1xvtsh31#

不知道你用的是哪个版本的scala,scala 2.12that trait was removed之后。
Scala 2.13集合库中最重要的变化是:

  • Traversable不再存在,只有Iterable

X1 E1 F1 X可以帮助你。
下图显示了scala.collection包中的所有集合。这些都是高级抽象类或trait,通常具有可变和不可变的实现。
x1c 0d1x的数据
Traversable是一个提供接口的抽象。然后你有一个具体的实现,其中并不是所有的元素都保持顺序。一旦构建了集合,你可以使用head方法请求第一个元素(记住,如果集合为空,则此方法会抛出异常,同时headOption将始终返回一个值)。如果您不止一次向不可变集合请求第一个元素,它将始终返回相同的值。在可变集合中,它并不总是为真。
那个方法的医生说
创建此可遍历集合的第一个元素。

注意:不同的运行可能会返回不同的结果,除非底层集合类型是有序的。
返回:此可遍历集合的第一个元素。抛出:NoSuchElementException -如果可遍历集合为空。

当它说“might return different results for different runs”时,意味着如果您运行应用程序两次,如果底层集合没有排序,则每次运行的结果都可能不同。

相关问题