Seq 的使用与 List、Array 和 Vector 的使用相比如何?

Cor*_*ped 5 scala list vector seq scala-collections

在 SO,我看到了将Array 与 SeqList 与 Seq以及Vector 与所有内容进行比较的问题。但我不明白一件事。我什么时候应该真正使用 aSeq来替代其中的任何一个?我知道何时使用 a List、何时使用 anArray以及何时使用 a Vector。但是什么时候使用Seq而不是上面列出的任何集合是一个好主意呢?为什么我应该使用trait扩展Iterable而不是上面列出的所有具体类?

dk1*_*k14 6

通常应该使用Seq作为方法或类的输入参数,为一般序列定义(只是一般,不一定是泛型):

def mySort[T](seq: Seq[T]) = ...
case class Wrapper[T](seq: Seq[T]) 
implicit class RichSeq[T](seq: Seq[T]) { def mySort = ...}
Run Code Online (Sandbox Code Playgroud)

所以现在您可以将任何序列(例如VectorList)传递给mySort.

如果您关心算法复杂性 - 您可以将其专门化为IndexedSeq(快速随机元素访问)或LinearSeq(快速内存分配)。无论如何,如果您希望函数的输入参数具有更多的多态性,那么您应该更喜欢最顶级的类,就像Seq所有序列的通用接口一样。如果您需要更通用的东西 - 您可以使用TraversableIterable