Г. Шилдт - С#4.0 Полное руководство (1160795), страница 193
Текст из файла (страница 193)
Следовательно, оно возвращает такое же значение, как и стандартное свойство, Соипг, определяемое для всех коллекций. В отличие от свойства Соипс, свойство Ьеппсв доступно не только для чтения, но и для записи, а значит, с его помощью можно изменить размер коллекции типа В1гйггау. Так, при сокращении коллекции типа ввсйггау лишние биты усекаются, начиная со старшего разряда, А при расширении коллекции типа Вьгйггау дополнительные биты, имеющие логическое значение га1яе, вводятся в коллекцию, начиная с того же старшего разряда.
Кроме того, в классе В1сйггау определяется следующий индексатор. риЫЬС Ьоо1 ЬЫя(ьпс 1пг(ех) ( Чес; яегп ) С помощью этого индексатора можно получать или устанавливать значение элемента. В приведенном ниже примере демонстрируется применение класса Вугйггау. Продемонстрировать применение класса Вьсйггяу. ияьпс ЯуясепГ ия1пс Яуясеи.со11есггппя; с1аяя Вйоепю ( риЫЬс ясяс1с чего ЯпонВЬГя(ясг1пс ген, Вгтяггяу Ыгя) ( Сопяо1е.нг1геьгпе(ген) г Гог(1пс 1=0; 1 < Ьгся.соипг~ ты) Сопяо1е.нпте("(О, — 6) ", Ыгя(г)); сопяо1е.игтгеььпе("1п")г ) ягягьс чо1П Нягп() Вггйггау Ья = пен Вггйггяу(8); Ьусе() Ь = ( 67 Вьслггау ьаз = пен В1ЬАггяу(Ь); риЫ1с ио1с( Яес(ьпс гппех, Ьоо1 иа1ие) риЫ1с чо1с( Яесй11(Ьоо1 иа1ие) риЬ11с В1САггау Хог(ВЬГАггау иа1ие) Выполняет операцию логического сложения ИЛИ би- тов вызывающего объекта и коллекции иа1ие.
Воз- вращает коллекцию типа В1гйггау, содержащую результат Устанавливает бит, указываемый по индексу 1пг)ех, равным значению иа1ие Устанавливает все биты равными значению «а1ие Выполняет логическую операцию исключающее ИЛИ над битами вызывающего объекта и коллекции иа1не. Возвращает коллекцию типа вусйггау, со- держащую результат Глава 2б. Комекции, перечислители и итераторы 953 Бьонвтта("Исходное содержимое коллекции Ьа:", Ьа)) Ьа = Ьа.иот(); БпонВттз("Содержимое коллекции Ьа после логической операции НОТ:", Ьа)) БьонВттз("Содержимое коллекции Ьа2:", Ьа2); В1тлгтау Ьаз = Ьа.Хот(Ьа2); БьонВттз("Резульгат логической операции Ьа ХОВ Ьа2:", Ьаз)) ) ) Эта программа дает следующий результат. Исходное содержимое коллекции Ьа: Га15Е Га15Е Га15Е Га15Е Га15Е Га15Е Га15Е Га15е Содержимое коллекции Ьа после логической операции НОТ: Тгце Ттце Тгце Ттце Тгце Ттце Ттце Ттце Содержимое коллекции Ь52: Тгце Тгце Га1*е Га15е Га15е Га15е Гтгце Га15е Результат логической операции Ьа ХОЯ Ьа2: Га15е Га15е Ттце Ттце Тгце Тгне Га15е Тгце Специальные коллекции Класс специальной комекции Описание СО11есс1опзцтт1 НуЬттбР1ст1опату Содержит фабричные методы для создания комекций Предназначен для комекций, в которых для хранения небольшого количества пар "ключ-значение" используется класс ь15ЬР1сс1опату.
При превышении комекцией определенного размера автоматически используется класс назЬьаЬ15 для хранения ее элементов Предназначен для комекций, в которых для хранения пар "ключ- значение" используется связный список. Такие комекции рекомендуются только для хранения небольшого количества элементов Предназначен для отсортированных комекций, в которых хранятся пары "ключ-значение", причем и ключ, и значение от- НОСЯТСЯ К ТИПУ зст1ПН Предназначен для коллекций, в которых хранятся индексируемые пары "ключ-значение" Предназначен для комекций, оптимизированных для хранения символьных строк Предназначен для хеш-таблиц, в которых хранятся 'пары "ключ-значение", причем и ключ, и значение относятся к типу 5тт1пс Р15СРтсттопату Нагнет)51цеСО11есс1оп Ото)егес(Р1сстопату Бсг1ппСО11ест1оп Бтг1ппРтст1опату В среде ЛЕТ ггаптетчог)г предусмотрен ряд специальных коллекций, оптимизированных длл работы с данными конкретного типа или для их обработки особым образом.
Классы этих необобщенных коллекций определены в пространстве имен Б уз Сел) . Со11есс1опз . Брес1а1т тес) и перечислены ниже. 954 Часть й. Библиотека Св Кроме того, в пространстве имен Буясев. Со11ессьопя определены три базовых абстрактных класса: со11есгьопВаяе, Веацоп1усо11ессйопВаяе и Втсс1опагуваяе. Эти классы могут наследоваться и служить в качестве отправной точки для разработки собственных специальных коллекций. Обобщенные комекции Благодаря внедрению обобщений прикладной интерфейс Со!1ест1опя АР1 значительно расширился, в результате чего количество классов коллекций и интерфейсов удвоилось.
Обобщенные коллекции объявляются в пространстве имен Буягев. Со11ессйопя. Яепег1с. Как правило, классы обобщенных коллекций являются не более чем обобщенными эквивалентами рассматривавшихся ранее классов необобщенных коллекций, хотя это соответствие не является взаимно однозначным. Например, в классе обобщенной коллекции Ыпхеоь1яс реализуется двунаправленный список, тогда как в необобщенном эквиваленте его не существует. В некоторых случаях одни и те же функции существуют параллельно в классах обобщенных и необобщенных коллекций, хотя и под разными именами. Так, обобщенный вариант класса АггауЬТяс называется Ыяс, а обобщенный вариант класса Вая1ттаЫе — Отсг1опагу. Кроме того, конкретное содержимое различных интерфейсов и классов реорганизуется с минимальными изменениями для переноса некоторых функций из одного интерфейса в другой.
Но в целом, имел ясное представление о необобщенных коллекциях, можно без особого труда научиться применять и обобщенные коллекции. Как правило, обобщенные коллекции действуют по тому же принципу, что и не- обобщенные, за исключением того, что обобщенные коллекции типизированы. Это означает, что в обобщенной коллекции можно хранить только те элементы, которые совместимы по типу с ее аргументом.
Так, если требуется коллекция для хранения несвязанных друг с другом разнотипных данных, то для этой цели следует использовать классы необобщенных коллекций. А во всех остальных случаях, когда в коллекции должны храниться объекты только одного типа, выбор рекомендуется останавливать на классах обобщенных коллекций. Обобщенные коллекции определяются в ряде интерфейсов и классов, реализующих эти интерфейсы. Все они описываются далее по порядку.
Интерфейсы обобщенных коддекцнй В пространстве имен Буя сев. Со11есгуопя . Оепегьс определен целый ряд интерфейсов обобщенных коллекций, имеющих соответствующие аналоги среди интерфейсов необобщенных коллекций. Все эти интерфейсы сведены в табл. 25.10. таблица 25.10. Интерфейсы обобщенных комекций Описание Интерфейс 1Со11есг1оп<Т> Определяет основополагающие свойства обобщенных комекций 1Соврагег<Т> Определяет обобщенный метод совраге () для сравнения объектов, хранящихся в коллекции ТВ1сгтопагу<ткеу, туа1це> Определяет обобщенную комекцию, состоящую из пар "ключ-значение" Глава 25.
Комекции, перечислители и итераторы 955 Окончание табл. 25.10 Интерфейс Описание Определяет обобщенный метод сесеппвегасог (), предоставляющий перечислитель для любого класса комекции Г) редоставляет методы, позволяющие получать содержи- мое коллекции по очереди Сравнивает два объекта на предмет равенства Определяет обобщенную коллекцию, доступ к которой можно получить с помощью индексатора 1ЕппвегаЬ1е<Т> Еппвегагог<Т> 1ес(па11суСоврагег<т> 11 ЕзС<т> Интерфейс 1Со11есСйоп<Т> гпс ссппс ( яес; ) Ьоо1 1звеапсп1у ( ЧеСГ ) Свойство Соопг содержит ряд элементов, хранящихся в данный момент в коллекции.
А свойство 1зне а с(Оп 1 у имеет логическое значение с гое, если коллекция доступна только для чтения. Если же коллекция доступна как для чтения, так и для записи, то данное свойство имеет логическое значение га1зе. Кроме того, в интерфейсе 1Со11есссоп<т> определены перечисленные ниже методы. Обратите внимание на то, что в этом обобщенном интерфейсе определено несколько большее количество методов, чем в его необобщенном аналоге.
Метод Описание чотс( АсЫ(Т ТСев) Добавляет элемент ТСев в вызывающую коллекцию. Гене- рирует исключение носепррогсес(ехсерссоп, если кол- лекция доступна только для чтения Удаляет все элементы из вызывающей комекции Возвращает логическое значение сгпе, если вызывающая комекция содержит элемент усев, а иначе — логическое значение га1зе Копирует содержимое вызывающей комекции в массив аггау, начиная с элемента, указываемого по индексу аггау1пс(ех УдаЛяЕт ПЕРВОЕ ВХОждЕНИЕ ЭЛЕМЕНта 1 Сев В ВЫЗЫВаЮщЕй комекции.
Возвращает логическое значение сгпе, если элемент 1 сев удален. А если этот элемент не найден в вы- зывающей коллекции, то возвращается логическое значе- ние га1зе чосс( С1еаг() Ьоо1 Сопга1пз(Т Тгев) чоьб СоруТо (Т(] аггау, гпС аггау1ппех) чосс( Еевоче(Т Тгего) Некоторые из перечисленных выше методов генерируют исключение )(огэпрроггес(Ехсергсоп, если коллекция доступна только для чтения. В интерфейсе 1Со11е сгсоп<Т > определен ряд свойств, которые являются общими для всех обобщенных коллекций. Интерфейс 1Сс11есС1сп <т> является обобщенным вариантом необобщенного интерфейса 1Со11ессгсп, хотя между ними имеются некоторые отличия. Итак, в интерфейсе 1Со11есС1оп<Т> определены следующие свойства. 95б Часть (1.