0

以下、これらのデータ構造の両方の説明: (プログラミング in scala book から)

リンクされたリスト

リンクされたリストは、次のポインターでリンクされたノードで構成される変更可能なシーケンスです。ほとんどの言語では、空のリンク リストとして null が選択されます。空のシーケンスでもすべてのシーケンス メソッドをサポートする必要があるため、これは Scala コレクションでは機能しません。特に、LinkedList.empty.isEmpty は true を返す必要があり、NullPointerException をスローしてはなりません。空の連結リストは、代わりに特別な方法でエンコードされます。それらの次のフィールドは、ノード自体を指します。それらの不変のいとこのように、リンクされたリストは順番に操作するのが最適です。さらに、連結リストを使用すると、要素または連結リストを別の連結リストに簡単に挿入できます。

可変リスト

MutableList は、単一のリンクされたリストと、そのリストの終端の空のノードを参照するポインターで構成されます。これにより、list append は一定時間操作になります。これは、ターミナル ノードを検索するためにリストをトラバースする必要がないためです。MutableList は現在、Scala での mutable.LinearSeq の標準実装です。

主な違いは、型に最後の要素のポインタが追加されたことMutableListです。

質問は次のとおりLinkedListですMutableList。厳密にはMutableList(新しいポインターにもかかわらず) 同等であり、使用済みメモリ (最後の要素のポインター) を少し追加するだけでさらに実用的ではありませんか?

4

1 に答える 1

2

MutableListをラップするため、LinkedListほとんどの操作には追加の間接ステップが含まれます。ラッピングは a への内部変数を含むことを意味することに注意してくださいLinkedList(効率的な最後の要素の検索のため、実際には 2 つです)。したがって、リンクされたリストは、可変リストを実現するために必要な構成要素です。

最後の要素の前に追加したり検索したりする必要がない場合は、LinkedList. Scala はデータ構造の幅広い選択肢を提供するため、最初に必要なすべての操作 (およびそれらの望ましい効率) のチェックリストを作成し、次に最適なものを選択するのが最善です。

一般に、不変の構造体を使用することをお勧めします。これらの構造体は、多くの場合、可変構造体と同じくらい効率的であり、同時実行性の問題は発生しません。

于 2013-01-06T12:54:17.383 に答える