一个序列和Scala中的一个列表之间的区别一个序列和Scala中的一个列表之间的区别(Differe

2019-05-17 00:04发布

我已经看到了,有时正在使用的序列,而其他时候是列出许多例子...

是否有任何区别,比前一个是Scala的类型,从Java名列该榜等?

Answer 1:

在Java方面,Scala的Seq将是Java的List ,以及Scala的List将是Java的LinkedList

需要注意的是Seq是一个trait ,这相当于Java的interface ,但与上崭露头角的后卫方法相当。 Scala的List是由扩展一个抽象类Nil:: ,这是具体实现List

因此,在Java的List是一个interface ,Scala的List是一个实现。

除此之外,Scala的List是不可改变的,这不是的情况下LinkedList 。 事实上,Java有没有等同于一成不变的集合(只读东西既保证了新的对象不能改变,但你仍然可以改变旧的,并且,因此,“只读”一节)。

Scala的List深受编译器和库优化,它在函数式编程的基本数据类型。 但是,它有它的局限性,它是不够的并行编程。 这些天, Vector比一个更好的选择List ,但习惯是很难打破。

Seq是序列的良好的推广,所以如果你面向接口编程,你应该使用。 请注意,实际上有三个人: collection.Seqcollection.mutable.Seqcollection.immutable.Seq ,这是后者一个是“默认”导入范围。

还有GenSeqParSeq 。 后面的方法在平行尽可能运行,而前者是父既SeqParSeq ,是用于当的代码并行不要紧合适的概括。 他们都是比较新引进的,所以人们不使用它们的还不很多。



Answer 2:

甲SEQ是一个可迭代具有定义的元素的顺序。 序列提供了一种方法apply()为索引,取值范围为0到该序列的长度。 SEQ有许多亚类,包括队列,范围,列表,堆栈,和LinkedList。

一个列表是作为不可改变的链表实现的序列。 这是最好的情况下,与后进先出(LIFO)访问模式中使用。

下面是从完整的集合类层次结构Scala的常见问题 :



Answer 3:

在Scala中,列表从SEQ继承性,但产品 ; 这里是正确的定义列表 :

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

[注: 实际的定义比较复杂一点点位,以适应与和使用Scala的非常强大的集合框架。]



Answer 4:

Seq是一个特点List工具。

如果你定义容器作为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



文章来源: Difference between a Seq and a List in Scala