1. ホーム
  2. list

[解決済み] ScalaのSeqとListの違いについて

2022-02-17 05:17:29

質問

多くの例で、Seqが使われることもあれば、Listが使われることもあるようですが...。

前者がScalaの型であり、ListがJavaから来たものであるということ以外に、何か違いがあるのでしょうか?

どのように解決するのですか?

Javaで言えば、Scalaの Seq は、Javaの List であり,Scala の List は、Javaの LinkedList .

なお Seqtrait と同じで、Javaの interface が、新進気鋭のディフェンダー・メソッドと同等である。Scalaの List は抽象クラスで、それを拡張するために Nil:: の具体的な実装である List .

そこで、Javaの Listinterface は、Scalaの List は実装である。

その先には、Scalaの List はイミュータブルですが、これは LinkedList . 実際、Javaにはimmutableコレクションに相当するものはありません(read onlyは新しいオブジェクトが変更できないことを保証するだけで、古いオブジェクトはまだ変更可能で、したがって、"read only"のほうは変更可能です)。

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

Seq はシーケンスの一般化として優れているので、インターフェイスにプログラミングする場合はそれを使うべきでしょう。なお、実際には3つあります。 collection.Seq , collection.mutable.Seqcollection.immutable.Seq で、スコープにインポートされるのは後者の方です。

また GenSeqParSeq . 後者のメソッドは可能な限り並行して実行されますが,前者は SeqParSeq これは、コードの並列性が重要でない場合に適した一般化です。どちらも比較的新しく導入されたものなので、まだあまり使われていないようです。