2012-04-02 4 views
11

可能性の重複:
When should I use a List vs a LinkedList
What is a great resource for learning about the implementation details of .NET generic collections?リストは<T>にリンクされていますか?

linked list(ないLinkedList<T>クラス)の種類System.Collections.Generic.List<T>ですか?

リンクリストは一緒にシーケンスを表すノードの基からなるデータ構造です。最も単純な形態では、各ノードは、データムと、シーケンス内の次のノードへの参照(言い換えれば、リンク)とで構成される。

ノードが2つのフィールド(整数値と次のノードへのリンク)を含むリンクリスト。
最後のノードは、リストの終わりを示すために使用されるターミネータにリンクされています。それがある場合は、リンクリストの種類

wikipedia.org

のですか?

+1

@Adrian Iftodeを:この質問は、とき 'LinkedListの'上 ''リストを選択するよう求めていません。 – BoltClock

+0

@ BoltClock'saUnicorn、はい、私はコメントとして投稿する必要があります –

答えて

23

いいえ、List<T>は配列によってバッキングされています。これは本質的に.NET 1.0のArrayListの汎用バージョンです。ドキュメントから:

List<T>クラスは、ArrayListクラスの一般的な同等物です。これは、必要に応じてサイズが動的に増加する配列を使用してIList<T>ジェネリックインターフェイスを実装します。

配列に裏打ちされているため、インデクサー経由でのアクセスはリンクされたリストのO(N)ではなくO(1)です。

リンクリストが必要な場合はLinkedList<T>を使用してください。これは二重リンクリストです。私は.NETがを単独で公開するとは思わない。 - リンクリストタイプ。

+1

あなたはそれが配列のようなメモリで管理されているという意味ですか?しかし、どのようにオブジェクトに不定数のオブジェクトを追加できますか?それからアイテムを削除できますか? –

+2

@ JohnIsaiahCarmona:内部的に配列変数があることを意味します。配列は固定サイズです(* all *配列は.NETにあります)が、リストを拡張する必要がある場合は、新しい配列が作成され、既存の要素がコピーされます。同様に、アイテムを削除すると、残りの要素が新しい正しい場所にコピーされます。 –

4

List<T> ...技術的な観点からは、NOTリンクリストのタイプです。

あなたがC#でリンクリストを持つようにしたい場合:

  • どちらかあれば((ダブルリンク リスト用)を内蔵しLinkedList<T>タイプ
  • を使用するか、独自の実装を作成 重リンク1)をしたい - here's an example