web-dev-qa-db-ja.com

使用するscala可変リストはどれですか?

これは No Scala可変リスト へのフォローアップ質問です

Scalaで可変リストを使用したい。から選ぶことができます

どちらがいいですか、「標準」とは何か、推奨される慣用的なscala way?.

私の場合、私はHashMapを使用しています。この場合、「リスト」(一般的にはそれを意味します)は値側になります。次に、ファイルから何かを読み取っています。すべての行について、ハッシュマップで適切なリストを見つけて、その値をリストに追加したいと思います。

30
Karel Bílek

読者がこの古い質問にアクセスするために:ドキュメントの Concrete Mutable Collection Classes セクションに、可変リストクラスの概要と、どのクラスをいつ使用するかの説明が含まれています。

17
Daniel Werner

必要なものに依存します。

DoubleLinkedListはリンクされたリストで、ノードのリストを前後に移動できます。 prevおよびnext参照を使用して、それぞれ前のノードまたは次のノードに移動します。

LinkedListは単一リンクリストであるため、prevポインターはありません-リストの次の要素に常に移動するだけの場合、これが必要です。

編集:上記の2つは、効率的な追加をサポートするMutableListsやmutable.Queuesなどのより複雑なリスト構造のビルディングブロックとして使用することを意図していることに注意してくださいinternally.

上記の2つのコレクションには、線形時間の追加操作があります。

ListBufferはバッファクラスです。単一リンクリストのデータ構造によってサポートされていますが、nextポインターをクライアントに公開しないため、イテレーターとforeachを使用してのみトラバースできます。ただし、その主な用途は、バッファーおよび不変リストビルダーとしてです。+=を介して要素をバッファーに追加し、resultを呼び出すと、機能的なimmutable.Listを非常に効率的に取得できます。変更可能なリストや不変のリストとは異なり、追加操作と追加操作はどちらも一定時間です。+=を使用して末尾に非常に効率的に追加できます。

MutableListは内部的に使用されます。単一リンクリストのデータ構造に基づいてカスタムコレクションクラスを実装する予定がない限り、通常は使用しません。たとえば、可変キューはこのクラスを継承します。 MutableListクラスは、リスト内の最後のノードへの参照を維持するため、効率的な一定時間の追加操作もあります。

35
axel22

アイテムを追加する場合は、Listを使用しないでください。 Listsは、アイテムを先頭に追加する場合に適しています。代わりにArrayBufferを使用してください。

10
drexin

後ろに追加できるリストを使いたいだけです。

次に Growable を実装するものを選択します。個人的には、Buffer実装の1つを提案します。

LinkedListDoubleLinkedListは主に他のコレクションの基本的な実装として存在するため、遠ざけていますが、Scala 2.9。 x。Scala 2.10.0で始まるので、さまざまなバグ修正により標準に達したと思います。それでも、+=など、人々が期待するいくつかの方法が欠けています。それらに基づいたコレクションを見つけます。

2