Visual Basic での .NET Framework のコレクション
.NET Framework には、データの格納と取得のための専用のクラスが用意されています。 これらのクラスでは、スタック、キュー、リスト、およびハッシュ テーブルがサポートされています。 大半のコレクション クラスは同じインターフェイスを実装しています。 それらのインターフェイスを実装すると、必要に応じて独自のコレクション クラスを作成することもできます。
どの種類のコレクションが自分のニーズに最も合っているかを判断する必要があります。
Visual Basic と .NET Framework のコレクション クラスの違い
.NET Framework のコレクション クラスは、System.Collections、System.Collections.Generic、System.Collections.Specialized、および System.Collections.ObjectModel の各名前空間で定義されています。 Visual Basic と .NET Framework のコレクション クラスの主な違いは以下のとおりです。
先頭のインデックス番号。 .NET Framework のコレクションはインデックス番号が 0 から始まるのに対し、Visual Basic のコレクションはインデックス番号が 1 から始まります。 つまり、Visual Basic のコレクションでは、要素のインデックス値は 1 から Count プロパティの値までであるのに対し、.NET Framework のコレクションでは、要素のインデックス値は 0 からコレクションの Count プロパティの値より 1 つ少ない値までです。
要素の型。 Visual Basic のコレクションは Object 型の要素をサポートします。 このコレクションはタイプ セーフではありません。任意のデータ型の要素を追加できます。 通常は、これによりパフォーマンスが低下します。Object データ型から実際の型に要素を変換する必要があるからです。
.NET Framework のコレクションの中には、Object 型の要素を持つものもありますが、それ以外の大半は、厳密に型指定された要素を持ちます。つまり、固有の型の要素をサポートします。このため、タイプ セーフなコレクションとなり、通常、最適なパフォーマンスが実現されます。
キー付き要素。 Visual Basic のコレクションを使用すると、要素をコレクションに追加するときにキーを指定できます。 キーは一意の文字列値であり、後でその文字列を使用して当該要素にアクセスできます。 .NET Framework のコレクションでは、キーの扱いはさまざまです。 キーをサポートするものとしないものがあります。
System.Collections のクラス
System.Collections 名前空間のクラスでは、要素は、固有の型のオブジェクトとしてではなく Object 型のオブジェクトとして格納されます。
次の表は、よく使用する主なクラスの一覧です。
クラス |
説明 |
必要に応じてサイズが動的に拡大される配列を使用して IList インターフェイスを実装します。 |
|
Boolean 値として表されるビット値のコンパクトな配列を管理します。True はビットがオン (1) であることを示し、False はビットがオフ (0) であることを示します。 |
|
キーのハッシュ コードに基づいて編成された、キーと値のペアのコレクションを表します。 |
|
先入れ先出し (FIFO) のオブジェクトのコレクションを表します。 |
|
後入れ先出し (LIFO) のオブジェクトの簡単な非ジェネリック コレクションを表します。 |
System.Collections.Generic と System.Collections.ObjectModel のクラス
System.Collections.Generic 名前空間および System.Collections.ObjectModel 名前空間には、厳密に型指定されたコレクションを作成し、要素を作成するときにデータ型を指定できる、ジェネリック型が用意されています
次の表は、よく使用する主なクラスの一覧です。
クラス |
説明 |
ジェネリック コレクションの基本クラスです。 |
|
キーに基づいて編成された、キーと値のペアのコレクションを表します。 |
|
値の中にキーが埋め込まれているコレクションの抽象基本クラスを提供します。 |
|
ダブルリンク リストを表します。 |
|
LinkedList<T> のノードを表します。 このクラスは継承できません。 |
|
必要に応じてサイズが動的に拡大される配列を使用して IList<T> インターフェイスを実装します。 |
|
先入れ先出しのオブジェクトのコレクションを表します。 |
|
キーに基づいて並べ替えられた、キーと値のペアのコレクションを表します。 |
|
関連付けられた IComparer<T> 実装に基づいて、キーにより並べ替えられた、キーと値のペアのコレクションを表します。 |
|
任意の同じ型のインスタンスの、後入れ先出し (LIFO) の可変サイズのコレクションを表します。 |
|
読み取り専用のジェネリック コレクションの基本クラスです。 |
System.Collections.Specialized のクラス
System.Collections.Specialized 名前空間には、文字列専用のコレクションやリンク リスト、ハイブリッド ディクショナリなど、厳密に型指定された専用のコレクション クラスが用意されています。
次の表は、よく使用する主なクラスの一覧です。
クラス |
説明 |
文字列の大文字小文字の違いを無視するコレクションを作成します。 |
|
コレクションが小さいうちは ListDictionary を使用し、コレクションが大きくなってきたら Hashtable に切り替える IDictionary を実装します。 |
|
シングルリンク リストを使用して IDictionary を実装します。 おおむね 10 個以下の項目を格納するコレクションでの使用をお勧めします。 |
|
キーまたはインデックスのいずれかでアクセスできる、関連付けられた文字列キーとオブジェクト値のコレクションの抽象基本クラスです。 |
|
キーまたはインデックスのいずれかでアクセスできる、関連付けられた文字列キーと文字列値のコレクションを表します。 |
|
キーまたはインデックスに基づいて並べ替えられた、キーと値のペアのコレクションを表します。 |
|
文字列のコレクションを表します。 |
|
キーと、オブジェクトではなく文字列として厳密に型指定された値とのハッシュ テーブルを実装します。 |