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