これは No Scala可変リスト へのフォローアップ質問です
Scalaで可変リストを使用したい。から選ぶことができます
scala.collection.mutable.DoubleLinkedList
scala.collection.mutable.LinkedList
scala.collection.mutable.ListBuffer
scala.collection.mutable.MutableList
どちらがいいですか、「標準」とは何か、推奨される慣用的なscala way?.
私の場合、私はHashMapを使用しています。この場合、「リスト」(一般的にはそれを意味します)は値側になります。次に、ファイルから何かを読み取っています。すべての行について、ハッシュマップで適切なリストを見つけて、その値をリストに追加したいと思います。
読者がこの古い質問にアクセスするために:ドキュメントの Concrete Mutable Collection Classes セクションに、可変リストクラスの概要と、どのクラスをいつ使用するかの説明が含まれています。
必要なものに依存します。
DoubleLinkedList
はリンクされたリストで、ノードのリストを前後に移動できます。 prev
およびnext
参照を使用して、それぞれ前のノードまたは次のノードに移動します。
LinkedList
は単一リンクリストであるため、prev
ポインターはありません-リストの次の要素に常に移動するだけの場合、これが必要です。
編集:上記の2つは、効率的な追加をサポートするMutableList
sやmutable.Queue
sなどのより複雑なリスト構造のビルディングブロックとして使用することを意図していることに注意してくださいinternally.
上記の2つのコレクションには、線形時間の追加操作があります。
ListBuffer
はバッファクラスです。単一リンクリストのデータ構造によってサポートされていますが、next
ポインターをクライアントに公開しないため、イテレーターとforeach
を使用してのみトラバースできます。ただし、その主な用途は、バッファーおよび不変リストビルダーとしてです。+=
を介して要素をバッファーに追加し、result
を呼び出すと、機能的なimmutable.List
を非常に効率的に取得できます。変更可能なリストや不変のリストとは異なり、追加操作と追加操作はどちらも一定時間です。+=
を使用して末尾に非常に効率的に追加できます。
MutableList
は内部的に使用されます。単一リンクリストのデータ構造に基づいてカスタムコレクションクラスを実装する予定がない限り、通常は使用しません。たとえば、可変キューはこのクラスを継承します。 MutableList
クラスは、リスト内の最後のノードへの参照を維持するため、効率的な一定時間の追加操作もあります。
アイテムを追加する場合は、List
を使用しないでください。 List
sは、アイテムを先頭に追加する場合に適しています。代わりにArrayBuffer
を使用してください。
後ろに追加できるリストを使いたいだけです。
次に Growable
を実装するものを選択します。個人的には、Buffer
実装の1つを提案します。
LinkedList
とDoubleLinkedList
は主に他のコレクションの基本的な実装として存在するため、遠ざけていますが、Scala 2.9。 x。Scala 2.10.0で始まるので、さまざまなバグ修正により標準に達したと思います。それでも、+=
など、人々が期待するいくつかの方法が欠けています。それらに基づいたコレクションを見つけます。