gpt4 book ai didi

scala - Scala 中什么时候应该选择 Vector?

转载 作者:行者123 更新时间:2023-12-03 04:12:47 26 4
gpt4 key购买 nike

看来 Vector 在 Scala 收藏聚会上迟到了,所有有影响力的博文都已经离开了。

在 Java 中,ArrayList 是默认集合 - 我可能会使用 LinkedList,但前提是我已经仔细考虑了算法并足够仔细地进行优化。在 Scala 中,我应该使用 Vector 作为我的默认 Seq,还是尝试找出 List 何时实际上更合适?

最佳答案

作为一般规则,默认使用 Vector 。它比 List 更快对于几乎所有内容,对于大于平凡大小的序列,内存效率更高。看这个documentation Vector 与其他集合相比的相对性能。使用 Vector 有一些缺点。具体来说:

  • 头部的更新比 List 慢(虽然没有你想象的那么多)

Scala 2.10 之前的另一个缺点是 List 的模式匹配支持更好,但这在 2.10 中得到了纠正,广义 +::+提取器。

还有一种更抽象的代数方法来解决这个问题:您概念上有什么样的序列?另外,您概念上用它做什么?如果我看到一个函数返回 Option[A] ,我知道该函数在其域中存在一些漏洞(因此是部分的)。我们可以将相同的逻辑应用于集合。

如果我有一个 List[A] 类型的序列,我有效地断言了两件事。首先,我的算法(和数据)完全是堆栈结构的。其次,我断言我要对这个集合做的唯一事情就是完整的 O(n) 遍历。这两者确实是齐头并进的。相反,如果我有 Vector[A] 类型的东西,我唯一断言的是我的数据具有明确定义的顺序和有限的长度。因此,Vector 的断言较弱。 ,这带来了更大的灵 active 。

关于scala - Scala 中什么时候应该选择 Vector?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6928327/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com