list list区别 array区别 - Scala中Seq和List之间的区别




2 Answers

用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被编译器和库高度优化,并且它是函数式编程中的基本数据类型。 但是,它有局限性,并且不适合并行编程。 现在, VectorList更好,但习惯很难打破。

Seq对序列来说是一个很好的概括,所以如果你编程接口,你应该使用它。 请注意,其中有三个: collection.Seqcollection.mutable.Seqcollection.immutable.Seq ,后者是导入到作用域的“default”。

还有GenSeqParSeq 。 后面的方法在可能的情况下并行运行,前者是SeqParSeq父代,是代码并行性无关紧要时的适当概括。 它们都是相对新引入的,所以人们还没有使用它们。

list删除元素 list合并

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

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




Seq是一个具有已定义的元素顺序的Iterable。 序列为索引提供了一个apply()方法,范围从0到序列的长度。 Seq有许多子类,包括Queue,Range,List,Stack和LinkedList。

List是一个Seq,它被实现为一个不可变的链表。 最适用于后进先出(LIFO)访问模式的情况。

以下是Scala FAQ中的完整集合类层次结构:




Related