Г. Шилдт - С#4.0 Полное руководство (1160795), страница 199
Текст из файла (страница 199)
Эти свойства приведены ниже. Свойство риЫгс 1пь Сарас1су ( дес; яес) Описание Получает или устанавливает емкость вызывающей коллекции в виде отсо- ртированного списка Получает метод сравнения для вызы- вающего списка Получает комекцию ключей Получает комекцию значений риЫТс 1Соврагег<ТК> Соврагег ( десг риЬ11с 1ЬСяс<ТК> Кеув ( брег) ] риЬ11с 1ЕТвг<ТЧ> Ча1иея ( дег; ) И наконец, в классе яогсег(11яг<ткеу, тча1ие> реализуется приведенный ниже индексатор, определенный в интерфейсе 1Р1ссзопагу<ТКеу, ТЧа1ие>.
риЬ11с ТЧа1ие ГЬ1я(тнеу Кеу) ( Чесг вес; ) Этот ицдексатор служит для получения и установки значения элемента коллекции, а также для добавления в коллекцию нового элемента. Но в данном случае в качестве индекса служит ключ элемента, а не сам индекс. В приведенном ниже примере демонстрируется применение класса яоггег(Ыяг<ТКеу, ТЧа1ие>. Это еще один измененный вариант представленного Глава 25. Коллекции, перечисаитеви и итераторы 977 ранее примера базы данных работников. В данном варианте база данных хранится в коллекции типа Богеебифвт. // Продемонстрировать применение класса обобщенной О коллекции БогсеспЛвс<ткеу, туа1це>.
цзгпч Бувгещ; цв1пд Бувгею.со11есстопв.оепег1с; с1азз Бепзвбещо ( всат1с чогб Ма1п() ( с'! Создать коллекцию в виде отсортированного списка для хранения имен и фамилий работников и их зарплаты. БоггебЬгвг<вггтпд, боцще> в1 пен Боггебптвс<всгьпч, боцЬ1е>(); с'с' Добавить элементы в коллекцию. в1.АсЫ("Батлер, Джон", 73000); в1.Абс((" Шварц, Сара", 59000); *1.Абб("Пайк, Томас", 45000)т в1.АсЫ("Фрэнк, Эд", 99000)т Получить коллекцию ключей, т.е. фамилий и имен.
1со11есггоп<вггтпд> с = в1.Кеув; О Использовать ключи лля получения значений, т.е. зарплаты. гогеасп(всгтпч вгг 1п с) Сопво1е.ыггге51пе("(О), зарплата: (1:С)", всг, в1(згг])г Сопво1е.игьгеьвпе(); Ниже приведен результат выполнения этой программы. Батлер, Джон, зарплата: 573,000.00 Пайк, Томас, зарплата: 545,000.00 Фрэнк, Эд, зарплата: 599,000.00 Шварц, Сара, зарплата: 559,000.00 Как видите, список работников и их зарплаты отсортированы по ключу, в качестве которого в данном случае служит фамилия и имя работника. Класс ВЬас)с<Т> Класс Бсас)с<Т> является обобщенным эквивалентом класса необобщенной коллекции Бтасю В нем поддерживается стек в виде списка, действующего по принципу "первым пришел — последним обслужен".
В этом классе реализуются интерфейсы Со11есб1оп, 1ЕпцшегаЬ1е и 1ЕпцтегаЬ1е<Т>, Кроме того, в классе Ббасх<Т> непосредственно реализуются методы С1еаг (), Сопта1пз () и СоруТо (), определенные в интерфейсе 1со11естгоп<Т>. А методы Абб() и Еещоче () в этом классе не поддерживаются, как, впрочем, и свойство 1знеабоп1у.
Коллекция класса Ббас)с<Т> имеет динамический характер, расширяясь по мере необходимости, чтобы вместить все элементы, которые должны в ней храниться. В классе 5 сап)с<т> определяются следующие конструкторы. 978 Часть П. Библиотека С№ риЬ11с Ягасх() рпЬ11с ЯгасК(гпс сарастсу) рпЬ11с ягасК(1Еппиегаще<Т> со11есгтоп) В первой форме конструктора создается пустой стек с выбираемой по умолчанию первоначальной емкостью, а во второй форме — пустой стек, первоначальный размер которого определяет параметр сара с1 Гу. И в третьей форме создается стек, содержащий элементы коллекции, определяемой параметром со11ессцоп.
Его первоначальная емкость равна количеству указанных элементов. В классе Ятасх<Т> определяется ряд собственных методов, помимо тех, что уже объявлены в интерфейсах, которые в нем реализуются, а также в интерфейсе 1Со11ест1оп<Т>. Некоторые из наиболее часто используемых методов этого класса перечислены в табл. 25.20. Как и в классе Ясасх, эти методы обычно применяются следующим образом.
Для того чтобы поместить объект на вершине стека, вызывается метод Рпяп () . А для того чтобы извлечь и удалить объект из вершины стека, вызывается метод Рор ( ) . Если же объект требуется только извлечь, но не удалить из вершины стека, то вызывается метод Реех () . А если вызвать метод Рор () или РееК (), когда вызывающий стек пуст, то сгенерируется исключение 1пча11<(Орегат1опЕхсерт1оп. Таблица 25.20. Методы, определенные в к(ассе ВЬас)с<т> Метод Описание риЫТс Т Реех() Возвращает элемент, находящийся на вершине стека, но не удаляет его Возвращает элемент, находящийся на вершине стека, удаляя его в процессе работы Помещает элемент 1 Сев В СтЕк Возвращает массив, содержащий копии элементов вы- зывающего стека Сокращает избыточную емкость вызывающей коллекции в виде стека риЫТс Т Рор() рнЫ1с чоьц Рпяп(Т лги) риЬ11с Т[] Тодггау() рдЬ11с чо1<( Тг1вЕхсеяв() О продемонстрировать применение класса Ясасх<т>.
иятпд Яуягеи; нягпд Яуягеи.оо11есгтопв.сепех1сг с1аяя ОепЯСасхоеио ( ягагтс чоха Ма1п () ( ягаск<всгтпд> вс = пен ясаск<всггпч>() вС.РпяЬ("один" )' вс.рнвЬ("два")г яС.РияЬ("три")г вС.РпяЬ("четыре" ); яС.РовЬ("пять"); ниг1е(яг.ооепс > 0) ( ясггпд ясг = вс.Рор()г В приведенном ниже примере программы демонстрируется применение класса Ягасх<Т>. Глава 25. Коллекции, перечислители и итераторы 979 сопво1е.
нгьте (втт + " ) Сопво1е. Хт1теъьпе (); ) ) При выполнении этой программы получается следующий результат. пять четыре трн два один Класс (2иеце<Т> Класс Оиеие<Т> является обобщенным эквивалентом класса необобщенной коллекции Опеые. В нем поддерживается очередь в виде списка, действующего по принципу "первым пришел — первым обслужен".
В этом классе реализуются интерфейсы 1Со11есслоп, 1ЕпигвегаЬ1е и 1ЕппыегаЬ1е<Т>. Кроме того, в классе Япепе<Т> непосредственно реализуются методы С1еаг (), Сопсаспз () и СоруТо (), определенные в интерфейсе 1со11ппгьпп<т>. А методы дг(г) () и негвпте () в этом классе не поддерживаются, как, впрочем, и свойство 1зпеас(Ов1у.
Коллекция класса Опепе<Т> имеет динамический характер, расширяясь по мере необходимости, чтобы вместить все элементы, которые должны храниться в ней. В классе Опепе<Т> определяются следующие конструкторы. рвЫтс Явепе () рпЫтс Япепе(тпт сарасясу) рвЫьс свече (1впиыетаЫе<т> сп11ессзоп) В первой форме конструктора создается пустая очередь с выбираемой по умолчанию первоначальной емкостью, а во второй форме — пустая очередь, первоначальный размер которой определяет параметр сара од Су.
И в третьей форме создается очередь, содержащая элементы коллекции, определяемой параметром со11есгдоп. Ее первоначальная емкость равна количеству указанных элементов. В классе Опепе<Т> определяется ряд собственных методов, помимо тех, что уже объявлены в интерфейсах, которые в нем реализуются, а также в интерфейсе 1Со11есг1оп<Т>. Некоторые из наиболее часто используемых методов этого класса перечислены в табл. 25.21. Как и в классе баеве, эти методы обычно применяются следующим образом. Для того чтобы поместить объект в очередь, вызывается метод Епцпепе () .
Если требуется извлечь и удалить первый объект из начала очереди, то вызывается метод Оеоиепе () . Если же требуется извлечь, но Не удалять следующий объект из очереди, то вызывается метод Реек () . А если методы Рег)пепе () и Реек () вызываются, когда очередь пуста, то генерируется исключение 1пча11с(Орегаг1опЕхсерг1оп. Таблица 25.21. Методы, определенные в классе Яиеце<Т> Описание Метод рпЬ11с Т пес(пепе () Возвращает объект из начала вызывающей очереди.
Возвращаемый объект удаляется из очереди рпбуьс чо1с( епг(пепе (т Тгет) добавляет элемент Тгегя в конец очереди риЬ11с Т Рее)г() Возвращает элемент из начала вызывающей очереди, но не удаляет его 9ВО Часть П. Библиотека С() Окончание табл. 25.21 Описание Метод рпЫТс чсггпа1 Т[) Тодггау() рпЬ11с чобб ТгбвЕхсеяя() Возвращает массив, который содержит копии эле- ментов из вызывающей очереди Сокращает избыточную емкость вызывающей кол- лекции в виде очереди В приведенном ниже примере демонстрируется применение класса О аепе<т>. /! Продемонстрировать применение класса Яиепе<Т>. пяьпд Буясев; пя1пс Яуясев.со11есьгопя.оепег1се с1аяя Оепопепепево ягаггс чоха Маьп() Опеое<бопвге> ч = пен Опепе<бопЬ1е>() Ч.ЕпЧпепе(98,6); Ч.Епопепе(212.0)7 Ч.Епппепе(32.0)~ с(.ЕпсГ>епе(3.1416) 1 бооЬ1е яов = О.О; Сопяо1е.нг1се("Очередь содержит: ")7 нп11е(Ч.Соппс > 0) ( бопЪ1е ча1 = Ч.
Оеопепе () 1 Сопяо1е.нггсе(ча1 + япв е= ча1; Сопяо1е.нгвсеълпе("цпитоговая сумма равна " + япв); ) Вот к какому результату приводит выполнение этой программы. Очередь содержит: 98.6 212 32 3.1416 Итоговая сумма равна 345.7416 Класс НааЬБес<Т> В классе НаяЛБег<Т> поддерживается коллекция, реализующая множество. Для хранения элементов этого множества в нем используется хеш-таблица. В классе наяьБеь<т> реализуются интерфейсы 1со11ессгоп<т>, 1Бес<т>, 1епивегаЫе, 1ЕпсвегаЫе<Т>, 1Бегда11хаЫе, а также 1Реяегга1ьхаггопСа11Ьасуь В коллекции типа На яЬБег<Т> реализуется множество, все элементы которого являются уникальными. Иными словами, дубликаты в таком множестве не допускаются.