Г. Шилдт - С#4.0 Полное руководство (1160795), страница 196
Текст из файла (страница 196)
риЫ1с т сьья(хпг Тпиех) ( чем яею ) С помощью этого индексатора устанавливается и получается значение элемента коллекции, указываемое по индексу Тпс(ех. В приведенном ниже примере программы демонстрируется применение класса 11яг<Т>. Это измененный вариант примера, демонстрировавшего ранее класс Аггау11яс.
Единственное изменение, которое потребовалось для этого, заключалось в замене класса Аггауъуяс классом 11яс, а также в использовании параметров обобщенноготипа. 964 Часть 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яс.сопла); // Отобразить содержимое динамического массива, // используя индексирование массива. Сопяо1е.Хгьсе("Текущее содержимое: "); Тот (1па г=о; 1 < 1яа ° Соцпс; 1++) Сопяо1е.игтсе(1яс().) + " "); Сопяо1е.ыг1сеь1пе ("1п"); Сопяо1е.иг1геЬ1пе("Удалить 2 элемента "); // Удалить элементы из динамического массива. 1яв.решоче('Г'); 1яс.решоче('й')) Сопво1е.иг1сеь1пе("Количество элементов: " + 1яа.сапог); // Отобразить содержимое динамического массива, используя цикл Гогеасй.
Сопяо1е.ыг1се("Содержимое: "); Еогеасй(айаг с 1п 1яс) Сопяо1е.иг1се(с + " ") т Сопяо1е.иг1сеь1пе ("1п"); Сопяо1е.игзгеььпе("Добавить еще 20 элементов"); // Добавить количество элементов, достаточное длл // принудительного расширения массива. Тот(1пг 1=0у г < 20; 1++) 1яа.йс(б((айаг)('а' + г)); сопяо1е.хгтгепьпе("текущая емкость: " + 1яг.сарас1гу); Сопяо1е.игйгесьпе("Количество элементов после добавления 20 новых: 1яС.Саада); Сопяо1е.Хг).се("Содержимое: "); Глава 25.
Комекции, перечислитеяи и итераторы 965 Гогеасп(спас с 1п 1яС) сопяо1е.хстсе(с + " ")т сопяо1е.хстсеь1пе(")и")т // Изменить содержимое динамического массива, // используя индексирование массива. сопяо1е.хг1сеььпе("изменить три первых элемента") 1зС(0] = 'Х'т 1яс (1] = 'т' ) 1яС(2] = 'Е'т сопяо1е.хгьсе("содержимое: Гогеасп(спас с 1п 1яы Сопяо1е.истое(с + " "); Сопяо1е.истгеьапе()) О Следукшая строка кода недопустима из-за нарушения безопасности обобщенного типа.
О 1яс.))пс)(99); О Ошибка, поскольку это не тип сьаг! ) ) Эта версия программы дает такой же результат, как и предыдущая. Исходное количество элементов: О Добавить б элементов Количество элементов: 6 Текущее содержимое: С А Е В О Е Удалить 2 элемента Количество элементов: 4 Содержимое: С Е В О Добавить еще 20 элементов Текущая емкость: 32 Количество элементов после добавления 20 новых: 24 Содержимое: С Е В О а Ь с о е Г 9 Ь 1 ] Х 1 ш и о р с) г я с Изменить три первых элемента Содержимое: Х У 2 О а Ь с С е Г 9 Ь 1 3 Х 1 ш и о р с( с я с Класс Ып]сесП з ВЬ<Т> В классе ЬТпкеЖ1зс<Т> создается коллекция в виде обобщенного двунаправленного списка.
В этом классе реализуются интерфейсы 1Со11есгзоп, 1Со11есСТоп<Т>, 1ЕппщегаЫе, 1ЕппшегаЬТе<Т>, 1Бег1а11хаЬ1еи 10еяегаа11таСТопСа11Ьас)с. В двух последних интерфейсах поддерживается сериализация списка. В классе 1 Тп кем 1з с <т> определяются два приведенных ниже открытых конструктора. роЫТс ЬвпхеСЫяС() роЫ1с ЬьпкеСЬ1яС (1ЕпошегаЫе<Т> со11есгтоп) В первом конструкторе создается пустой связный список, а во втором конструкторе — список, инициализируемый элементами из коллекции со11ес сцоп. 9бб Часть П. Библиотека С№ риЫ1с Глпкебъ1вгиобе<Т> Нехг ( иеСГ ) риЫ1с Ььпхебъьвгиобе<т> Ргеч1оив ( Чегг ) риЫ1с Ььпкеб( ьвС<Т> т 1вС ( пег; ) риЬ11с Т Ча1ие ( иеС; веС; С помощью свойств нехс и ргечдоия получаются ссылки на предыдущий и последующий узлы списка соответственно, что дает возможность обходить список в обоих направлениях.
Если же предыдущий или последующий узел отсутствует, то возвращается пустая ссылка. Для получения ссылки на сам список служит свойство 11яС. А с помощью свойства Уа1ие можно устанавливать и получать значение, находящееся в узле списка. В классе 11пхеб11вс<т> определяется немало методов.
В табл. 25.16 приведены наиболее часто используемые методы данного класса. Кроме того, в классе 11пкеб11яС<Т> определяются собственные свойства, помимо тех, что уже объявлены в интерфейсах, которые в нем реализуются. Эти свойства приведены ниже. риЫ1с т ьпхеб( ьвСНобе<т> ГьгяС ( пег( ) риЬ11с т ьпкебг ьвгиобе<т> ьаяс ( десг ) С помощью свойства рдгяС получается первый узел в списке, а с помощью свойства Ьая С вЂ” последний узел в списке.
Таблица 25.16. Наиболее часто используемые методы, определенные в классе 1,1п)себу.да Ь<Т> Описание Метод риЬ11с Рьпиебпьягйобе<Т> АббАТСег(11п)геб11ягиобе<Т> пос(е, Т ча1ие) Добавляет в список узел со значением ча1ие непосредственно после указанного узла побе. Указываемый узел побе не должен быть пустым (пи1Ц. Метод возвращает ссылку на узел, содержащий значение ча1ие риЫ1с чодб Аббдйгег(пьпхеб11яСИобе<Т> побе, 11п)геб11яснобе<Т> пенИобе) Добавляет в список новый узел пень(обе непосредственно после указанного узла лоде.
Указываемый узел побе не должен быть пустым (пи11). Если узел побе отсутствует в списке или если новый узел пень(обе является частью другого списка, то' генерируется исключение 1пча11бОрегаС1опЕхсерС1оп Добавляет в списокузел со значением т а1ие непосредственно перед указанным узлом побе. Указываемый узел по бе не должен быть пустым (пи11). Метод возвращает ссылку на узел, содержащий значение ча1ие риЬ11с 1№пхебпдягнобе<Т> АббнеТоге(Ь№пхебппягнобе<Т> побе, Т ча1ие) Как и в большинстве других реализаций связных списков, в классе 11пкеб11яс<т> инкапсулируются значения, хранящиеся в узлах списка, где находятся также ссылки на предыдущие и последующие элементы списка.
Эти узлы представляют собой объекты класса ььпкебььясиобе<т>, В классе 11пкеб11ясиобе<т> предоставляются четыре следующих свойства Глава 25. Коллекции, перечислители и итераторы 967 Окончание табл. 25бб Метод Описание риЫ1с чодб Аббвебоге (1впгебз ТяГИобе<Т> побе, 11пКебтвяснобе<Т> пем)/обе) Добавляет в список новый узел пен)уобе непосредственно перед указанным узлом побе. Указываемый узел побе не должен быть пустым (пи11).
Если узел пос(е отсутствует в списке или если новый узел пенл)обе является частью другого списка, то генерируется исключение 1поа1гбОрегас1опЕхсертдоп Добавляет узел со значением оа1ие в начало списка. Метод возвращает ссьвку на узел, содержащий значение са1ие Добавляет узел побе в начало списка. Если узел попе является частью другого списка, то генерируется исключение 1пуа1гборегагдопехсерг1оп Добавляет узел со значением оа1ие в конец списка. Метод возвращает ссьику на узел, содержащий значение иа1ие Добавляет узел пос(е в конец списка.
Если узел побе является частью другого списка, то генерируется исключение 1пиа1г ВОрегагдопехсерггоп Возвращает ссылку на первый узел в списке, имеющий значение оа1ие. Если искомое значение с а1 не отсутствует в списке, то возвращается пустое значение Возвращает ссылку на последний узел в списке, имеющий значение оа1ие.
Если искомое значение иа1 ие отсутствует в списке, то возвращается пустое значение Удаляет из списка первый узел, содержащий значение оа1ие. Возвращает логическое значение ггие, если узел удален, те. если узел со значением оа1ие обнаружен в списке и удален; в противном случае возвращает логическое значение Ха1яе Удаляет из списка узел, соответствующий укаЗаННОМу уЗЛу побе. ЕСЛИ УЗЕЛ побе Отоутствует в списке, то генерируется исключение 1поа11бОрегасдопЕхсертдоп Удаляет из списка первый узел Удаляет из списка последний узел риЫТс 1 Тпхебт Тяс<Т> Аббр1гяс (Т оа1ие) риЫТс ио1б Аббр1гяс(11плебвдясиобе побе) риЬ11с Ьдп)себ11яс<Т> Абб1,аяГ(Т иа1ие) риЫТс уо1б АббПаяс(11пКебвдятнобе побе) риЫТс 1 Тпхебвдяс<Т> Егпб(Т иа1ие) риЫгс ТдпКеб11яс<Т> ЕдпбЬаяс (Т оа1ие) риЬ1гс Ьоо1 Еевоуе (Т оа1ие) риЫ1с оо1б Кевотге(й1пкебй1яс<Т> поде) риЫТс уодб Кевоуер1гяГ() риЬ11с иодб Вевоие1аяГ О // продемонстрировать применение класса пглкебпгяс<т>.