Scala における Seq と List の違い 質問する

Scala における Seq と List の違い 質問する

多くの例で、Seq が使用されている場合もあれば、List が使用されている場合もあります...

前者が Scala 型であり、リストが Java から来ていること以外に、何か違いはありますか?

ベストアンサー1

Java 用語で言えば、Scala の はSeqJava の となりList、Scala の はListJava の となりますLinkedList

は でSeqありtrait、これは Java の に似ていますinterfaceが、注目のディフェンダー メソッドと同等の機能を備えています。Scala の は およびによってList拡張される抽象クラスであり、これらは の具体的な実装です。Nil::List

したがって、Java の はListですinterfaceが、Scala の はList実装です。

さらに、Scala の はList不変ですが、 はそうではありませんLinkedList。実際、Java には不変コレクションに相当するものはありません (読み取り専用では、新しいオブジェクトは変更できないことが保証されるだけですが、古いオブジェクト、つまり「読み取り専用」オブジェクトを変更することはできます)。

Scala の はListコンパイラやライブラリによって高度に最適化されており、関数型プログラミングにおける基本的なデータ型です。しかし、制限があり、並列プログラミングには不十分です。最近ではVectorよりも の方が良い選択ですListが、習慣を変えるのは難しいです。

Seqcollection.Seqはシーケンスの適切な一般化なので、インターフェースをプログラムする場合は、これを使用する必要があります。実際には、、、の 3 つがあり、スコープにインポートされる「デフォルト」は後者であることにcollection.mutable.Seq注意collection.immutable.Seqしてください。

GenSeqまた、 ともありますParSeq。後者のメソッドは可能な場合は並列に実行されますが、前者は と の両方の親でありSeqParSeqコードの並列性が考慮されていない場合に適した一般化です。どちらも比較的新しいため、あまり使用されていません。

おすすめ記事