ジェネリック コレクションの基本クラスです。
Collection<int> collection = new Collection<int>(); collection.Add(1); collection.Add(2); collection.Add(3);
[System.Runtime.InteropServices.ComVisible(false)] [System.Serializable] public class Collection<T> : System.Collections.Generic.ICollection<T>, System.Collections.Generic.IEnumerable<T>, System.Collections.Generic.IList<T>, System.Collections.Generic.IReadOnlyCollection<T>, System.Collections.Generic.IReadOnlyList<T>, System.Collections.IList
public Collection ();Collection<T>() - Collection<T> コンストラクター (System.Collections.ObjectModel) | Microsoft Learn
内部ではList<T>が作成されます。Collection - collection.cs
public Collection() { items = new List<T>(); }
public Collection (System.Collections.Generic.IList<T> list);Collection<T>(IList<T>) - Collection<T> コンストラクター (System.Collections.ObjectModel) | Microsoft Learn
listの要素はコピーされません。Collection - collection.cs
listはコレクションによってラップされるだけのため、listへの操作はコレクションに影響します。このコンストラクタの計算量は、O(1)です。
int[] array = new[] { 1, 2, 3 }; List<int> list = new List<int> { 1, 2, 3 }; Collection<int> collection1 = new Collection<int>(array); Collection<int> collection2 = new Collection<int>(list); array[0] = 10; list[0] = 20; int r1 = collection1[0]; // 10 int r2 = collection2[0]; // 20 collection1[0] = 5; // NotSupportedException「コレクションは読み取り専用です。」 collection2[0] = 5; // ok
型 | プロパティ | 内容 |
---|---|---|
int | Count | 要素の数 |
T | Item[Int32] | 指定のインデックスにある要素 |
メソッド | 機能 |
---|---|
Add(T) | 末尾にオブジェクトを追加できる |
Remove(T) | 最初に見つかったオブジェクトを削除できる。削除できたときにはtrueが、それ以外はfalseが返される。オブジェクトが見つからないときもfalseが返される。 |
RemoveAt(Int32) | 指定のインデックスにある要素を削除できる |
Clear() | すべての要素を削除できる |
Insert(Int32, T) | 指定のインデックスに要素を挿入できる |
Contains(T) | オブジェクトがコレクション内に存在するかわかる |
IndexOf(T) | 最初に見つかったオブジェクトのインデックスを得られる |
public void Add (T item);Collection<T>.Add(T) メソッド (System.Collections.ObjectModel) | Microsoft Learn
このメソッドの計算量はO(1)です。
List<T>.Add(T)より低速です。
int MAX = 100 * 1000 * 1000; Stopwatch sw = new Stopwatch(); Collection<int> collection = new Collection<int>(); sw.Restart(); for (int i = 0; i < MAX; i++) collection.Add(1); Console.WriteLine(sw.ElapsedMilliseconds); // 998 // List<T>で追加した場合 List<int> list1 = new List<int>(); sw.Restart(); for (int i = 0; i < MAX; i++) list1.Add(1); Console.WriteLine(sw.ElapsedMilliseconds); // 492 // ... 初期容量を指定した場合 List<int> list2 = new List<int>(MAX); sw.Restart(); for (int i = 0; i < MAX; i++) list2.Add(1); Console.WriteLine(sw.ElapsedMilliseconds); // 289 // 配列で作成し、値を設定した場合 int[] array = new int[MAX]; sw.Restart(); for (int i = 0; i < MAX; i++) array[i] = 1; Console.WriteLine(sw.ElapsedMilliseconds); // 151
public int IndexOf (T item);Collection<T>.IndexOf(T) メソッド (System.Collections.ObjectModel) | Microsoft Learn
等しいことは、T型のEqualityComparer<T>.Defaultで決定されます。
メソッド | 機能 |
---|---|
ToArray<TSource>(IEnumerable<TSource>) | 配列を作成できる |