Scala中Seq和List之间的区别



Answers

在Scala中,List继承自Seq,但实现了Product ; 这里是List的正确定义:

sealed abstract class List[+A] extends AbstractSeq[A] with Product with ...

[注意: 实际的定义稍微复杂一点,以适应并利用Scala非常强大的收集框架。]

Question

我在许多例子中看到有时会使用Seq,而其他时间则是List ...

除了前者是Scala类型还是来自Java的List之外,是否有任何区别?




SeqList实现的特征。

如果将容器定义为Seq ,则可以使用任何实现Seq特性的容器。

scala> def sumUp(s: Seq[Int]): Int = { s.sum }
sumUp: (s: Seq[Int])Int

scala> sumUp(List(1,2,3))
res41: Int = 6

scala> sumUp(Vector(1,2,3))
res42: Int = 6

scala> sumUp(Seq(1,2,3))
res44: Int = 6

注意

scala> val a = Seq(1,2,3)
a: Seq[Int] = List(1, 2, 3)

只是一个简短的手段:

scala> val a: Seq[Int] = List(1,2,3)
a: Seq[Int] = List(1, 2, 3)

如果未指定容器类型,则基础数据结构默认为List




Related