Кроме того, в классе BitArray определяется следующий индексатор.

public bool this[int index] { get; set; }

С помощью этого индексатора можно получать или устанавливать значение элемента. В приведенном ниже примере демонстрируется применение класса BitArray.

// Продемонстрировать применение класса BitArray.

Using System;

Using System.Collections;

class BADemo {

Public static void ShowBits(string rem,

BitArray bits) {

Console.WriteLine(rem);

for(int i=0; i < bits.Count; i++)

Console.Write("{0, -6} ", bits[i]);

Console.WriteLine ("\n");

}

static void Main() {

BitArray ba = new BitArray(8); byte[] b = { 67 };

BitArray ba2 = new BitArray(b);

ShowBits("Исходное содержимое коллекции Ьа:", Ьа) ; ba = Ьа.Not ();

ShowBits("Содержимое коллекции Ьа после логической операции NOT:", Ьа);

ShowBits("Содержимое коллекции Ьа2:", Ьа2);

BitArray ЬаЗ = Ьа.Хог(Ьа2);

ShowBits("Результат логической операции ba XOR Ьа2:", ЬаЗ);

}

}

Эта программа дает следующий результат.

Исходное содержимое коллекции Ьа:

False False False False False False False False Содержимое коллекции ba после логической операции NOT:

True True True True True True True True Содержимое коллекции ba2:

True True False False False False ?True False Результат логической операции ba XOR ba2:

False False True True True True False True

 

Специальные коллекции

В среде .NET Framework предусмотрен ряд специальных коллекций, оптимизированных для работы с данными конкретного типа или для их обработки особым образом. Классы этих необобщенных коллекций определены в пространстве имен System. Collections . Specialized и перечислены ниже.

 

Класс специальной коллекции

 

Описание

 

CollectionsUtil

 

Содержит фабричные методы для создания коллекций

 

HybridDictionary

 

Предназначен для коллекций, в которых для хранения небольшого количества пар “ключ-значение” используется класс ListDictionary. При превышении коллекцией определенного размера автоматически используется класс Hashtable для хранения ее элементов

 

ListDictionary

 

Предназначен для коллекций, в которых для хранения пар “ключ-значение" используется связный список. Такие коллекции рекомендуются только для хранения небольшого количества элементов

 

NameValueCollection

 

Предназначен для отсортированных коллекций, в которых хранятся пары “ключ-значение”, причем и ключ, и значение относятся к типу string

 

OrderedDictionary

 

Предназначен для коллекций, в которых хранятся индексируемые пары “ключ-значение”

 

StringCollection

 

Предназначен для коллекций, оптимизированных для хранения символьных строк

 

StringDictionary

 

Предназначен для хеш-таблиц, в которых хранятся пары “ключ-значение”, причем и ключ, и значение относятся к типу

String

 

Кроме того, в пространстве имен System. Collections определены три базовых абстрактных класса: CollectionBase, ReadOnlyCollectionBase и DictionaryBase. Эти классы могут наследоваться и служить в качестве отправной точки для разработки собственных специальных коллекций.

Обобщенные коллекции

Благодаря внедрению обобщений прикладной интерфейс Collections API значительно расширился, в результате чего количество классов коллекций и интерфейсов удвоилось. Обобщенные коллекции объявляются в пространстве имен System. Collections . Generic. Как правило, классы обобщенных коллекций являются не более чем обобщенными эквивалентами рассматривавшихся ранее классов необобщенных коллекций, хотя это соответствие не является взаимно однозначным. Например, в классе обобщенной коллекции LinkedList реализуется двунаправленный список, тогда как в необобщенном эквиваленте его не существует. В некоторых случаях одни и те же функции существуют параллельно в классах обобщенных и необобщенных коллекций, хотя и под разными именами. Так, обобщенный вариант класса ArrayList называется List, а обобщенный вариант класса HashTable — Dictionary. Кроме того, конкретное содержимое различных интерфейсов и классов реорганизуется с минимальными изменениями для переноса некоторых функций из одного интерфейса в другой. Но в целом, имея ясное представление о необобщенных коллекциях, можно без особого труда научиться применять и обобщенные коллекции.

Как правило, обобщенные коллекции действуют по тому же принципу, что и-необобщенные, за исключением того, что обобщенные коллекции типизированы. Это означает, что в обобщенной коллекции можно хранить только те элементы, которые совместимы по типу с ее аргументом. Так, если требуется коллекция для хранения несвязанных друг с другом разнотипных данных, то для этой цели следует использовать классы необобщенных коллекций. А во всех остальных случаях, когда в коллекции должны храниться объекты только одного типа, выбор рекомендуется останавливать на классах обобщенных коллекций.