【C# コレクション】LinkedList HashSet Dictionary part3-3

NO IMAGE

今回はList以外のコレクションについて紹介していきます!

LinkedList(双方向連結リスト)

LinkedListは,要素同士がリンクによって結びつけられたListです.

その為,個々の要素を参照したり,変更する事ができません.

また,初期化によって値を設定する事もできないです.

しかし,Listと比べると,要素の追加,挿入,削除が簡単にできます

イメージにするとこんな感じです.



要素の追加,挿入

要素の追加,挿入は,Add系のメソッドを使います.

メソッド説明
AddFirst先頭に要素を追加.
AddLast末尾に要素を追加.
AddBefore指定した要素の前に追加.
AddAfter指定した要素の後に追加.

実行結果

AddBefore,AddAfterメソッドの第1引数は,LinkedListNode型を要求しています.

LinkedListNode型は,LinkedListの要素が持つ情報(ノード)です.

なので,直接要素を指定する事ができません.

先頭と末尾の要素は,First,Lastプロパティを使う事で簡単に記述できますが,

それ以外の要素を指定する場合は,Findメソッドを使います.(Findメソッドの戻り値が,LinkedListNode型になります.)

実行結果



要素の削除

要素の削除は,Remove系のメソッドを使います.

メソッド説明
Remove指定した要素を削除(最初に見つかった要素)
RemoveFirst先頭の要素を削除
RemoveLast末尾の要素を削除

実行結果



HashSet(セット)

HashSetは,要素の順番が存在しません.

つまり,インデックス(要素の番号)がありません.

要素の値の情報しか持たないコレクションです.

どういう物かと言えば,集合をイメージすると考えやすいと思います.(値が散らばっているイメージ)

上記のような特徴なので,要素の有無を比較するメソッドがほとんどです.

メソッド説明
IsSubsetOf指定したコレクションのサブセットかどうかを判定する.
IsSupersetOf指定したコレクションのスーパーセットかどうかを判定する.
Overlaps指定したコレクション(どれか1つの要素)を含んでいるか判定する.

サブセットは部分集合,スーパーセットは上位集合のことです.

また,これらのメソッドは全てbool型の戻り値を返します.

実行結果

HashSet(1,2,3,4,5)は,List(2,3,4)のサブセットではないのでFalse,

HashSetはListのスーパーセットなのでTrue,

HashSetはListの1つ以上の要素を含んでいるのでTrueを返します.

 

Dictionary(連想配列)

Dictionaryは,インデックスではなく,キーというもので要素を操作します.

連想配列,ハッシュテーブルと呼ぶこともあります.

Disctionaryを宣言する時に,型を2つ指定する必要があります

1つ目の型(左側)がキー,2つ目の型(右側)が値になります.

キーには,文字列や数値などを使う事ができます.

つまり,文字列でも要素を操作する事ができます.

foreachによって列挙はできますが,Keys,Valuesプロパティで,キーか値のどちらかを選択する必要があります.

実行結果

今回はここまで!

次回はQueue,Stackについて紹介します!

ここがわかりにくいとかありましたら,遠慮なく質問してください!