Г. Шилдт - С# 3.0 Полное руководство. 2010 (1160798), страница 175
Текст из файла (страница 175)
Возвращаемый объект ссылается на те же элементы, что и вызывающий обьект Первый конструктор создает пустую коллекцию класса 11зс с выбираемой по умолчанию первоначальной емкостью. Второй конструктор создает коллекцию типа Ейзс с количеством инициализируемых элементов, которое определяется параметром с и равно первоначальной емкости массива. Третий конструктор создает коллекцию типа Е1БС, имеющую указанную первоначальную емкость.
В данном случае емкость обозначает размер базового массива, используемого для хранения элементов коллекции. Емкость коллекции, создаваемой в виде динамического массива, может увеличиваться автоматически по мере добавления в нее элементов. В классе 1.1БС<Т> определяется ряд собственных методов, помимо тех, что уже объявлены в интерфейсах, которые в нем реализуются. Некоторые из наиболее употребительных методов этого класса перечислены в табл.
24.14. 872 Часть )(. Библиотека СЗ Окончание табл. 24. 14 Метод Описание риЫТс 1ЬС 1лоехой(Т ч) Возвращает индекс первого вхождения объекта ч в вы- зывающей коллекции. Если искомый обьект не обнаружен, возвращается значение -1 риЬ11с чото 1пяегтналсе(1лт яоагг1к(х, 1ЕливегаЫе<Т> с) Вставляет элементы коллекции с в вызывающую кол- лекцию, начиная с элемента, указываемого по индексу ягагггк(х риЬ11с 1пс ьаяс1пйехот(т ч) Возвращает индекс последнего вхождения обьекта ч в вы- зывающей коллекции. Если искомый объект не обнаружен, возвращается значение -1 Удаляет часть вызывающей коллекции, начиная с элемен- та, указываемого по индексу 1<(х, и включая количество элементов, определяемое параметром соил с риЫ Тс ч ох б аевоче лаосе (Тлт 1<(х, Тли сопля) риЬ11с чогб Вечегяе() Располагает элементы вызывающей коллекции в обратном порядке риЫТс чогб Кечегяе(1лг Располагает в обратном порядке часть вызывающей коля сагггг(х, 1пс сочло) лекции, начиная с элемента, указываемого по индексу 1<(х, и включая количество элементов, определяемое параметром сочло риЫ1с чогб Зогс() Сортирует вызывающую коллекцию по нарастающей риытс чо1к( яогс(1соврагег<т> совр) Сортирует вызывающую коллекцию, используя для срав- нения указанный метод совр.
Если параметр совр имеет пустое значение, то для сравнения используется метод, выбираемый по умолчанию риь11с чо1с яогс (соврагъяоп<т> сортирует вызывающую коллекцию, используя для сравнесовр) ния указанный делегат риЫТс чона Зогс(гпг ясагог<(х, 1ли соиле, 1Соврагег<Т> совр) Сортирует вызывающую коллекцию, используя для сравне- ния указанный метод совр. Сортировка начинается с эле- мента, указываемого по индексу ясагсг<(х, и включает количество элементов, определяемых параметром сопля.
Если параметр совр имеет пустое значение, то для срав- нения используется метод, выбираемый по умолчанию риЫгс т() толк<ау() Возвращает массив, содержащий копии элементов вызы- вающего обьекта риЫТс чогб Тг1вЕхсеяя() Сокращает емкость вызывающей коллекции таким обра- зом, чтобы она не превышала 10% от количества элемен- тов, хранящихся в ней на данный момент риЫ1с 1лт Сарас1ку ( Чеит яеи) Свойство Сарас1су позволяет установить и получить емкость вызывающей коллекции в качестве динамического массива. Эта емкость равна количеству элементов, которые может содержать коллекция до ее вынужденного расширения. Такая коллекция расширяется автоматически, и поэтому задавать ее емкость вручную необязательно.
Но из со- В классе 11зс<Т> определяется также собственное свойство Сарас1су, помимо тех, что уже объявлены в интерфейсах, которые в нем реализуются. Это свойство объявляется следующим образом: Глава 24. Коллекции, леречислители и итера(ори 873 ображений эффективности это иногда можно сделать, если заранее известно количество элементов коллекции. Благодаря этому исключаются издержки на выделение дополнительной памяти. В классе 11яс<т> реализуется также приведенный ниже индексатор, определенный в интерфейсе 1наяг<Т>.
рибтгс Т Свая(гпя Тбх] ( дея) яеял ) С помошью этого индексатора устанавливается и получается значение элемента коллекции, указываемое по индексу 1<)х. В приведенном ниже примере программы демонстрируется применение класса Ыяс<т>. Это переделанный вариант примера, демонстрировавшего ранее класс Аггау11яг. Единственное изменение, которое потребовалось для этого, заключалось в замене класса Аггау11яс классом 11зс, а также в использовании параметров обобшенного типа.
О Продемонстрировать применение класса ь1яя<т>. пя1по Яуяяели мягно Яуяяещ,со11еся1опя.сепег1с; с1аяя Оепьаяяпещо ( яяапас гоаб Иаап() ( // Создать колпекиию в виде динамического массива. Паяя<сваг> 1яа = пеи Ьаяя<снаг>(); Сопяо1е.нгаоеьапе("Исходное количество элементов: " + 1яя.ссыпя) Сопяо1е.нгаяенапе()) Сопяо1е.иг1яеЬ1пе("Добавить б элементов"); // Добавить элементы в динамический массив. 1яя.лом('С'); 1яя.лбе('А')) 1яя.лбб( К )) 1яС.А Ы('В'); 1яг.лош( П'); 1яя.аоЫ('Г')! Сопяо1е.нгаяеьапе("Количество элементов: " + 1яя.соппя)Л // Отобразить содержимое динамического массива, // используя индексирование массива. Сопяо1е.нг1яе("Текущее содержимое: "); тот(1пс 1=0; 1 < 1яс.соппсл 1т+) Сопяо1е.нгаяе(1яя (1] т " ")," Сопяо1е.нг1сеьгпе("1п"); Сопяо1е.нг1сеьапе("Удалить 2 элемента "); // Удалить элементы из динамического массива.
1яс.аещоте('г')л 1яг.нещоче('А')л сопяо1е.игасеь1пе("копичество элементов: " т 1яс.соппс); 874 Часть(). Бнблиа)ага С$ // Отобразить содержимое динамического массива, // Используя цикл Тогеасп. Сопзо1е.Игасе("Содержимое: "); Тогеасп(сЬаг с Тп 1зс) Сопво1е.иг1се(с + " "); Сопво1е.иг1ге11пе("1п"); Сопзо1е.иг1сеЕТпе("Добавить еще 20 элементов"); // Добавить количество элементов, достаточное для // принудительного расширения массива. Тог(апг 1=0; 1 < 20; 1++) 1зс.лоб((снаг)('а' + 1))) сопво1е.игасеьапе("текущая емкость: " +1вг.сарасагу); сопво1е.игагеьТпе("количество элементов после " ь "добавления 20 новых: " ь 1вс.соцпс)> Сопво1е.игасе("Содержимое.
"")) Тогеасп(спас с гп 1вс) Сопво1е.игасе(с + " "); Сопзо1е.ыгьсе1(пе("Тп"); // Изменить содержимое динамического массива, // используя индексирование массива. Сопво1е.игагеЕТпе("Изменить три первых элемента"); 1вс[0] = 'Х'4 1вс[1] = 'т'; 1вс[2] = 'Е') Сопво1е.власе("Содержимое: ")4 Тогеасп(сЬаг с 1п 1вс) сопво1е.итаке(с 4 " "); Сопво1е.иг1севапе()) // Следующая строка кода недопустима иэ-за // нарушения безопасности обобщенного типа.
// 1вс.або(99)) // Ошибка, поскольку это не тид сЬаг) ) ) Эта версия программы дает такой же результат, как и предыдуп(ая: Исходное количество элементов: 0 Добавить б элементов Количество элементов: 6 Текущее содержимое: С А Е В О Е Удалить 2 элемента Количество элементов: 4 Содержимое: С Е В О Добавить еще 20 элементов Текущая емкость: 32 Количество элементов после добавления 20 новых: 24 Содержимое: С Е В 0 а Ь с б е Т 9 Ь 1 3 к 1 ш и о р Ч г з Г Глава 24. Коллекции, перечислигвли и игерагоры 875 Изменить три первых элемента Содержимое: Х У 2 П а Ь с О е Т д Ь 1 1 К 1 и и о р Ч г я Г Класс у дп1сесзз да О<т> В классе Ь1пке<(Ь1эс<т> создается коллекция в виде обобщенного двунаправленного списка.
В этом классе реализуются интерфейсы 1со11есг1оп, 1со11есс1оп<т>, 1ЕпиюегаЫе, 1ЕпиюегаЫе<Т>, 15ег1а1ггаЫе и 10еяег1а11аае1опСа11ЬасК. В двух последних интерфейсах поддерживается сериализация списка. В классе Ьйпке<(Ь1яе<Т> определяются два приведенных ниже открытых конструктора. риЫгс ЬгпКеоьгяс О риЫ1с ь1пкеоьзяг (1епиаегаЫе<т> с) риы1с ьзпкеоьзягног)е<т> иехг ( чегг ) риы1с ьгпкеоьзясноое<т> ргетзоия ( чегг ) риЫ1с ЬзпКеОЬЬяг<т> ьгяс ( дес) ) риЫ1с Т Ча1ие ( Чес; яес; С помощью свойств нехг и Ргеигоия получаются ссылки на предыдущий и последующий узлы списка соответственно, что дает возможность обходить список в обоих направлениях. Если же предыдущий или последующий узел отсутствует, то возвращается пустая ссылка. Для получения ссылки на сам список служит свойство Ь1я С.
А с помощью свойства Ча1ие можно устанавливать и получать значение, находящееся в узле списка. В классе Ьйпкепвйяг<Т> определяется немало методов. В табл. 24.15 приведены наиболее употребительные методы данного класса. Кроме того, в классе папке<)1 Еяг<Т> определяются собственные свойства, помимо тех, что уже объявлены в интерфейсах, которые в нем реализуются. Эти свойства приведены ниже. риЫгс Ьзпкеоъ1ясиосе<Т> тггяс ( Чесг риЫгс Ьзпкеиъзягнопе<Т> Ьаяс ( сес) С помощью свойства р1гяг получается первый узел в списке, а с помощью свойства 1 аз с — последний узел в списке. )аблица 24.15.