Платформа .NET Framework предоставляет специализированные классы для хранения и извлечения данных.Эти классы обеспечивают поддержку стеков, очередей, списков и хэш-таблиц. Большинство классов коллекций реализуют одинаковые интерфейсы и эти интерфейсы могут наследоваться для создания новых классов коллекций, соответствующих более специализированным потребностям в хранении данных.
Приложения, предназначенные для платформы .NET Framework версии 2.0 или более поздней, должны использовать универсальные классы коллекций в пространстве имен System.Collections.Generic, обеспечивающие повышенную безопасность типа и эффективность по сравнению с нестандартными аналогами.
Классы коллекций имеют следующие свойства
Связанные данные могут обрабатываться более эффективно, если они объединены в коллекцию. Вместо того чтобы писать код для обработки каждого отдельного объекта, можно использовать один и тот же код для обработки всех элементов коллекции.
Для управления коллекцией используйте классы из пространств имен System.Collections,System.Collections.Generic и System.Collections.Concurrent для добавления, удаления и изменения либо отдельных элементов коллекции, либо диапазона элементов. Коллекцию можно скопировать целиком в другую коллекцию.
Некоторые классы System.Collections предоставляют возможность сортировки, и большинство из них индексированы. Управление памятью осуществляется автоматически, а вместимость коллекции увеличивается по мере необходимости. Синхронизация обеспечивает потокобезопасность при доступе к членам коллекции. Любой классSystem.Collections может создать свой собственный нумератор, облегчающий выполнение итерации элементов.
Коллекция представляет собой набор объектов схожих типов, сгруппированных вместе.
Объекты любого типа могут быть сгруппированы в одну коллекцию типаObject, чтобы воспользоваться преимуществами конструкций, свойственных языку. Например, оператор foreach языка C# предполагает, что все объекты коллекции имеют один и тот же тип.
Однако в коллекции типаObject происходит дополнительная индивидуальная обработка элементов, к примеру, упаковка и распаковка или преобразования, что влияет на производительность коллекции. Упаковка и распаковка обычно происходят при сохранении или извлечении типа значений из коллекции типаObject.
Универсальные коллекции, такие какList<T> и строго типизированные неуниверсальные коллекции, такие какStringCollection, позволяют избежать проблем с производительностью, если тип элемента является типом, для которого предназначена коллекция (например, сохранение или извлечение строк из StringCollection). Кроме того, при добавлении элемента в строго типизированную коллекцию выполняется автоматическая проверка типа такого элемента. По этим причинам настоятельно рекомендуется использовать универсальные коллекции классов всегда, когда это возможно.
Рассмотрим пример работы с коллекцией.
Реализует интерфейсIList с помощью массива с динамическим увеличением размера до нужного значения.
Пространство имен:System.Collections
Сборка: mscorlib (вmscorlib.dll)
Сортировка спискаArrayList не гарантируется. Необходимо отсортировать списокArrayList перед выполнением операций (таких, какBinarySearch), для которых требуется отсортированный списокArrayList.
Емкость коллекцииArrayList — это количество элементов, которое может вместить коллекция ArrayList. Когда в коллекцию ArrayList добавляются элементы, ее емкость автоматически увеличивается должным образом посредством перераспределения. Емкость может быть уменьшена посредством вызова методаTrimToSize или с помощью явного задания свойстваCapacity.
Доступ к элементам этой коллекции осуществляется с помощью целочисленного индекса. Индексы в этой коллекции начинаются с нуля.
КоллекцияArrayList принимает null т.е. пустая ссылка как допустимое значение и разрешает дублировать элементы.
Использование многомерных массивов в качестве элементов коллекции ArrayList не поддерживается.
using System; using System.Collections; public class SampleArrayList { public static void Main() { // Создает и инициализирует новый ArrayList. ArrayList myAL = new ArrayList(); myAL.Add("Hello"); myAL.Add("World"); myAL.Add("!"); // Выводит свойства и значения элементов ArrayList. Console.WriteLine( "myAL" ); Console.WriteLine( " Count: {0}", myAL.Count ); Console.WriteLine( " Capacity: {0}", myAL.Capacity ); Console.Write( " Values:" ); PrintValues( myAL ); } public static void PrintValues( IEnumerable myList ) { foreach ( Object obj in myList ) Console.Write( " {0}", obj ); Console.WriteLine(); } }