[解決済み] ScalaのSeqとListの違いについて
質問
多くの例で、Seqが使われることもあれば、Listが使われることもあるようですが...。
前者がScalaの型であり、Listが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にはimmutableコレクションに相当するものはありません(read onlyは新しいオブジェクトが変更できないことを保証するだけで、古いオブジェクトはまだ変更可能で、したがって、"read only"のほうは変更可能です)。
Scalaの
List
は、コンパイラやライブラリによって高度に最適化されており、関数型プログラミングの基本的なデータ型である。しかし、制約があり、並列プログラミングには不向きである。最近では
Vector
よりも、より良い選択です。
List
しかし、習慣はなかなか直らないものです。
Seq
はシーケンスの一般化として優れているので、インターフェイスにプログラミングする場合はそれを使うべきでしょう。なお、実際には3つあります。
collection.Seq
,
collection.mutable.Seq
と
collection.immutable.Seq
で、スコープにインポートされるのは後者の方です。
また
GenSeq
と
ParSeq
. 後者のメソッドは可能な限り並行して実行されますが,前者は
Seq
と
ParSeq
これは、コードの並列性が重要でない場合に適した一般化です。どちらも比較的新しく導入されたものなので、まだあまり使われていないようです。
関連
-
[解決済み] Racketで集合を含む集合を見つける方法
-
[解決済み] リストのリストからフラットなリストを作るには?
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] リスト内のアイテムのインデックスを検索する
-
[解決済み] リストが空かどうかを確認するにはどうすればよいですか?
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み] 割り当て後にリストが予期せず変更されました。その理由と防止策を教えてください。
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] Javaで配列をリストに変換する
-
[解決済み】Scalaのリスト連結、::と++の比較
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Haskellを学ぶ。HaskellでListからアイテムを削除する方法
-
[解決済み】Prologでリストを反転させる
-
[解決済み] TypeError: リストのインデックスは整数でなければならず、floatではない
-
[解決済み] Prolog-リストを繰り返し実行する
-
[解決済み] Ocaml: list.lengthを使用する。
-
[解決済み] PrologでListの要素をプリントアウトする
-
リストコレクションに関するいくつかの一般的な操作
-
[解決済み] リスト作成/連結のための構文
-
[解決済み] R:リストをテキストファイルに印刷する
-
[解決済み] Powershellですべてのデバイス、パーティション、ボリュームを一覧表示する