C#のジェネリックコレクションとは?ListとSortedListの基本を解説
C#におけるジェネリックコレクションには、List<T>やSortedListなどがあります。ジェネリックコレクションは、格納する要素の型を事前に指定できるため、型安全性が高く、実行時の型変換エラー(キャスト例外)を防ぐことができるのが大きなメリットです。
List<T>とは
List<T>は代表的なジェネリックコレクションの一つです。一方、ArrayListは非ジェネリックコレクションであり、任意のオブジェクトを格納できますが、取り出す際に明示的な型キャストが必要になります。
List<T>を使用すれば、コンパイル時に型がチェックされるため、より安全で効率的なコードを書くことができます。
Listのサンプルコード
以下の例では、6つの文字列要素を持つリストを作成し、その要素数を出力しています。
using System;
using System.Collections.Generic;
class Program {
static void Main() {
// コレクションの初期化
List<string> myList = new List<string>() {
"one",
"two",
"three",
"four",
"five",
"six"
};
Console.WriteLine(myList.Count);
}
}実行結果
6
SortedListとは
SortedListは、配列とハッシュテーブルを組み合わせた性質を持つコレクションです。キーまたはインデックスのどちらでも要素にアクセスでき、キーによって自動的にソートされるのが特徴です。
キーと値のペアを管理したい場合に便利で、Add()メソッドで要素を追加し、ContainsValue()メソッドで特定の値が存在するかどうかを確認できます。
SortedListのサンプルコード
以下の例では、4つの要素を持つSortedListを作成し、値の重複チェックを行っています。
using System;
using System.Collections;
namespace CollectionsApplication {
class Program {
static void Main(string[] args) {
SortedList sl = new SortedList();
sl.Add("001", "Tim");
sl.Add("002", "Steve");
sl.Add("003", "Bill");
sl.Add("004", "Tom");
if (sl.ContainsValue("Bill")) {
Console.WriteLine("This name is already in the list");
} else {
sl.Add("005", "James");
}
ICollection key = sl.Keys;
foreach (string k in key) {
Console.WriteLine(k + ": " + sl[k]);
}
}
}
}実行結果
This name is already in the list 001: Tim 002: Steve 003: Bill 004: Tom
このように、値「Bill」がすでにリスト内に存在するため、「005: James」は追加されず、既存の4つの要素だけが出力されます。なお、より新しいC#のコードでは、非ジェネリック版の代わりに型安全なSortedDictionary<TKey, TValue>やSortedList<TKey, TValue>の使用が推奨されます。
-
Java 9の不変(イミュータブル)コレクションのメリットとは?
Java 9では、Collections APIに複数のファクトリメソッドが追加されました。これらのファクトリメソッドを利用することで、変更不可(unmodifiable)なList・Set・Mapのコレクションオブジェクトを簡単に作成でき、コードの行数を大幅に削減できます。List.of()、Set.of()、Map.of()、Map.ofEntries()は、Java 9において不変(イミュータブル)コレクションを手軽に生成するための静的ファクトリメソッドです。不変コレクションのメリットヒープ領域の節約:従来のJavaバージョンでの作成方法と比較して、コレクションデータを格納するために必要
-
Javaのジェネリックコレクションとは?用途とメリットをわかりやすく解説
ジェネリックコレクションは、Java 5で導入された機能です。最大の特徴は型キャスト(キャスト変換)が不要になる点にあります。ジェネリクスを使用することで、コレクションから要素を取り出す際にいちいちキャストを書く必要がなくなり、コードがシンプルになります。さらに、ジェネリックコレクションは型安全(タイプセーフ)であり、型の整合性はコンパイル時にチェックされます。これにより、実行時エラー(ClassCastExceptionなど)を未然に防ぐことができます。また、データ型をクラスやインターフェースに対してパラメータとして渡せるため、汎用性の高い再利用可能なコードを書くことが可能です。型の互換性チ