Ave*_*ger 3 scala scala-collections
我正在List研究 Scala 中的方法。
val mylist = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 3, 10)
Run Code Online (Sandbox Code Playgroud)
我很困惑hasDefiniteSize和knownSize。
对于List,hasDefiniteSize返回true并knownSize返回-1。
这些方法背后的确切理论是什么?
这个方法是由一个超类定义的,它的超类List与可能无限的集合(如Streams、LazyLists 和Iterators)很常见。
有关更多详细信息,我相信文档说得最好。
这是hasDefiniteSize版本 2.13.1 中的一个:
测试此集合是否已知具有有限大小。已知所有严格集合的大小都是有限的。对于非严格集合(例如 Stream),如果已计算所有元素,则谓词返回 true。如果流尚未评估到最后,则返回 false。非空迭代器通常返回 false,即使它们是从具有已知有限大小的集合创建的。
注意:许多收集方法不适用于无限大小的集合。典型的故障模式是无限循环。这些方法总是尝试遍历而不先检查 hasDefiniteSize 是否返回 true。但是,检查 hasDefiniteSize 可以保证大小是明确定义的,并且不存在终止问题。
请注意,hasDefiniteSize不推荐使用以下消息:
(自 2.13.0 版起)检查 .knownSize 而不是 .hasDefiniteSize 以获取更多可操作信息(有关详细信息,请参阅 scaladoc)
进一步的文档knownSize说明:
此集合中的元素数(如果可以廉价计算),否则为 -1。便宜通常意味着:不需要集合遍历。
List是一个链表的实现,这就是为什么List(1, 2, 3).hasDefiniteSize返回true(集合不是无限的)而是List(1, 2, 3).knownSize返回-1(计算集合大小需要遍历整个列表)。
| 归档时间: |
|
| 查看次数: |
120 次 |
| 最近记录: |