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

标签 scala vector scala-collections

看来 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/

相关文章:

Scala 将 Json 文件读取为 Json

c++ - 借助定界符对重复字符串执行 vector push_back

c++ - 在 C++ 中静态构造函数的实现不起作用

java - 如何将字符串和整数添加到按钮的列表框中

scala - 在 scala 中,在 toMap 之后添加不相关的行时编译错误消失

scala - 使用sbt 0.11.2安装sbt-assembly

scala - 将 lib dir 添加到 IntelliJ 以获取非托管 sbt 依赖项

scala - 为特定成员类型扩展scala集合

scala - if isEmpty 问题

scala - Scala的语义可遍历,可迭代,序列,流和 View ?