回答:
Javaの用語では、ScalaのSeqJavaのだろうList、とScalaのはList、JavaのだろうLinkedList。
注SeqあるtraitJavaのと同じです、interfaceしかし、新進気鋭のDF法の同等と。Scala Listは、Nilとによって拡張される抽象クラス::であり、の具体的な実装です。List。
つまり、Java Listがであるinterface場合、Scala Listは実装です。
さらに、Scala Listは不変ですLinkedList。これはの場合とは異なります。実際、Javaには不変のコレクションに相当するものはありません(読み取り専用のものは、新しいオブジェクトを変更できないことを保証するだけですが、古いオブジェクトを変更できるため、「読み取り専用」のものを変更できます)。
Scala Listはコンパイラとライブラリによって高度に最適化されており、関数型プログラミングの基本的なデータ型です。ただし、制限があり、並列プログラミングには不十分です。最近でVectorは、がより良い選択ですListが、習慣を破るのは難しいです。
Seqシーケンスの一般化に適しているため、インターフェイスにプログラミングする場合は、それを使用する必要があります。:そこにそれらの3が実際にあることに注意してくださいcollection.Seq、collection.mutable.Seqそしてcollection.immutable.Seq、それはスコープにインポート「デフォルト」である後者の一つです。
GenSeqともありParSeqます。前者は両方の親であるが、後者の方法は、並列可能な場合に実行するSeqとParSeq、コードの並列性は問題ではない場合に適した一般化です。どちらも比較的新しく導入されたため、まだあまり使用されていません。
UnsupportedOperationExceptionと、このためにヒットする可能性があります。Javaで不変のリストを作成するには、Collections.unmodifiableList()を使用します。同様に、セット、マップなどの他のメソッドがあります。docs.oracle.com
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ます。
@ daniel-c-sobralが言ったように、Listは特性Seqを拡張し、scala.collection.immutable.$colon$colon(または::略して)実装された抽象クラスですが、専門性はさておき、使用するリストとseqのほとんどは、Seq(1, 2, 3)またはList(1, 2, 3)両方が返す形式で初期化されることに注意してくださいscala.collection.immutable.$colon$colon、したがって、次のように書くことができます:
var x: scala.collection.immutable.$colon$colon[Int] = null
x = Seq(1, 2, 3).asInstanceOf[scala.collection.immutable.$colon$colon[Int]]
x = List(1, 2, 3).asInstanceOf[scala.collection.immutable.$colon$colon[Int]]
結果として、重要なのは公開したいメソッドだけだと主張します。たとえば、Seqから::冗長であることがわかったfrom Listを使用して+:、デフォルトで個人的にSeqに固執することができます。
Stringコレクションではありません、それはJavaプログラマに馴染みの不変クラスの一例です。