我已经看到了,有时正在使用的序列,而其他时候是列出许多例子...
是否有任何区别,比前一个是Scala的类型,从Java名列该榜等?
我已经看到了,有时正在使用的序列,而其他时候是列出许多例子...
是否有任何区别,比前一个是Scala的类型,从Java名列该榜等?
在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.Seq
, collection.mutable.Seq
和collection.immutable.Seq
,这是后者一个是“默认”导入范围。
还有GenSeq
和ParSeq
。 后面的方法在平行尽可能运行,而前者是父既Seq
和ParSeq
,是用于当的代码并行不要紧合适的概括。 他们都是比较新引进的,所以人们不使用它们的还不很多。
甲SEQ是一个可迭代具有定义的元素的顺序。 序列提供了一种方法apply()
为索引,取值范围为0到该序列的长度。 SEQ有许多亚类,包括队列,范围,列表,堆栈,和LinkedList。
一个列表是作为不可改变的链表实现的序列。 这是最好的情况下,与后进先出(LIFO)访问模式中使用。
下面是从完整的集合类层次结构Scala的常见问题 :
在Scala中,列表从SEQ继承性,但产品 ; 这里是正确的定义列表 :
sealed abstract class List[+A] extends AbstractSeq[A] with Product with ...
[注: 实际的定义比较复杂一点点位,以适应与和使用Scala的非常强大的集合框架。]
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
。