Г. Шилдт - С# 3.0 Полное руководство. 2010 (1160798), страница 178
Текст из файла (страница 178)
Наиболееупотребительныеыетоды,определениыеаклассе Воксех)Еаас<тк, Метод Описание рагс гога Аоо(ТК )г, ТЧ н) Добавляет в список пару "ключ-значенне", определя- емую параметрами х н и Если ключ )г уже находится в списке, то его значение не изменяется н генериру- ется исключение АгпивепгБхсерг1оп риЫТс Ьоо1 ОопсаъпэКеу(тК )г) Возвращает логическое значение ггие, если вызы- вающий список содержит объект )г а качестве ключа; в противном случае — логическое значение та1эе риЫ1с Ьоо1 ОопсагпэЧа1ие(ТЧ ч) Возвращает логическое значение ггпе, если вызы- вающий список содержит значение И в противном случае — логическое значение Та1эе риЫТс 1Епивегасог<КеуЧа1иераъг<ТК, тч» Оегепивегагог() Возвращает перечнслнтель для вызывающего словаря риЬ11с гпс 1пг)ехогкеу(ТК )г) Возвращает индекс ключа х.
Если искомый ключ не обнаружен в списке, возвращается значение -! рпЫ1с Тпс 1поехОТЧа1ие(ТЧ х) Возвращает индекс первого вхождения значения х а вызывающем списке. Если искомое значение не обнар)лкено а списке, возвращается значение -1 риЬ11с Ьоо1 Кевоте(ТК )г) Удаляет нз списка пару ключ-значение" по указан- ному ключу к. Прн удачном исходе операции воз- вращается логическое значение сгибе, а если ключ )г отсутствует в списке — логическое значение та1ае риЫТс чо1г) Кевотехг (1пг 1бх) Удаляет нз списка пару "ключ-значение" по указан- ному индексу Тг(х РЧЫТс хоге ТггвЕхсеээ() Сокращает избыточную емкость вызывающей кол- лекции а виде отсортированного списка Кроме того, в классе ЕогсеЖ1эт<тк, тЧ> определяются собственные свойства, помимо тех, что уже объявлены в интерфейсах, которые в нем реализуются.
Эти свойства приведены ниже. Глаза 24. Коллекции, перечислнтелн н нтераторы 885 Свойство Описание рцвтгс гпс Сарасгсу ( дес," яес; ] Получает ипи устанавливает емкость вызывающей коллекции в виде отсортированного списка рцбтгс 1Соирагег<ТК> Сощрагег ( дег) ) Получает метод сравнения дпя вызывающего списка рцбтгс 111яс<ТК> Кеуя ( Бес) ) Получает коллекцию ключей рць11с 111яг<ту> уа1цея ( оегг ) получает коллекцию значений И наконец, в классе БогсебБ1БС<ТК, Ту> реализуется приведенный ниже индексатор, определенный в интерфейсе 1Р1СГ1опагу<ТК, ТЧ>. рцьггс ту сная(тК Леу) ( оег; яес; ) // Продемонстрировать применение класса обобщенной // коллекции Богсебваяс<ТК, ТЧ>.
ця1по Бузсещг ця1пд Буясею.Со11ессгопя.пепеггсг с1азя Бепзьоещо ( ясас1с чогб Магп() ( // Создать коллекцию в виде отсортированного списка // для хранения имен и фамилий работников и их зарплаты. Боггебваяс<зсг1пд, боцЬ1е> я1 = пен Богсебнаяг<ясггпо, боцЬ1е>()г // Добавить элементы в коллекцию. я1.хсЫ (" Батлер, Джон", 73000)г ят.або(-цварц, Сара", 59000); я1.хсЫ("Пайк, Томас", 45000)г я1.лсЫ("фрэнк, Эд", 99000); // Получить коллекцию ключей, т.е. фамилий и имен. 1со11есс1оп<ясг1пч> с = з1.Кеуз) // Использовать ключи для получения значений, т.е.
зарплаты. Тогеасп(яггапч ягг Тп с) Сопяо1е.иг1се11пе("(О), зарплата: (1:С]", ясг, я1(ясг)); Сопяо1е.нггсет Тле()г ) Этот индексатор служит для получения и установки значения элемента коллекции, а также для добавления в коллекцию нового элемента. Однако в данном случае в качестве индекса служит ключ элемента, а не собственно индекс. В приведенном ниже примере демонстрируется применение класса Боггеб11яг<ТК, ту>.
Это еще один переделанный вариант представленного ранее примера базы данных работников. В данном варианте база данных хранится в коллекции типа Боксе<(11яг. 886 Часть П. Библиотека С№ Ниже приведен результат выполнения этой программы. Батлер, джон, зарплатаг $73,000.00 Пайк, томас, зарплата: 545,000.00 Фрэнк, Эл, зарплата: 599,000.00 Шварц, Сара, зарплата: $59,000.00 Как видите, список работников и их зарплаты отсортирован по ключу, в качестве которого в данном случае служит фамилия и имя работника. Класс 8сдс)с<т> Класс Бсасй<т> является обобщенным эквивалентом класса необобшенной коллекции Бсаск.
В нем поддерживается стек в виде списка, действующего по принципу: первым пришел — последним обслужен. В этом классе реализуются интерфейсы СФ11есгтоп, 1ЕпишегаЬ1е и 1ЕпиюегаЬ1е<т>. Кроме того, в классе Бгаск<Т> непосредственно реализуются методы С1еаг (), Сопкатпз () и СоруТо Н, определенные в интерфейсе 1С011есетоп<т>. А методы Аг(г(() и Нетоие () в этом классе не поддерживаются, как, впрочем, и свойство 1зпеаг(Оп1у. Коллекция класса Бкаск<т> имеет динамический характер, расширяясь по мере необходимости, чтобы вместить все элементы, которые должны в ней храниться. В классе Бгаск<т> определяются следующие конструкторы: риЫ1с зпаск() риЫъс эиасК(тпи емкость) риЫтс зеаск(1ЕпизегаЫе<Т> с) Таблица 24.1Э. Методы, определенные а классе Вьас)к<т> Описание Метод риЫхс Т Реек() Возвращает элемент, находящийся на вершине сте- ка, но не удаляет его Возвращает элемент, находящийся на вершине сте- ка, удаляя его по ходу дела Помещает объект и в стек риЫ1с Т Рор() риЬ11с иола Ризп(Т и) риЫТс Т() Толггау() Возвращает массив, содержащий копии элементов вызывающего стека риЫ1с иота ТгьзЕхсезз() Сокращает избыточную емкость вызывающей кол- лекции а виде стека В первой форме конструктора создается пустой стек с выбираемой по умолчанию первоначальной емкостью, а во второй форме — пустой стек, первоначальный размер которого определяет емкость.
И в третьей форме создается стек, содержащий элементы указываемой коллекции с. Его первоначальная емкость равна количеству указанных элементов. В классе Бсаск<т> определяется ряд собственных методов, помимо тех, что уже обьявлены в интерфейсах, которые в нем реализуются, а также в интерфейсе 1со11ессхоп<т>. Некоторые из наиболее употребительных методов этого класса перечислены в табл. 24.19. Как и в классе Бсаск, эти методы обычно применяются следующим образом. Для того чтобы поместить объект на вершине стека, вызывается метод Ризй () .
А для того чтобы извлечь и удалить объект из вершины стека, вызывается метод Рор () . Если же объект требуется только извлечь, но не удалить из вершины стека, то вызывается метод Реек () . А если вызвать метод Рор () или Реек (), когда вызывающий стек пуст, то сгенерируется исключение 1пиа11г(Орегап1опЕхсерп1оп. Глава 24. Коллекции, перечисли(ели и итераторы 887 В приведенном ниже примере программы демонстрируется применение класса Ясаси<т>. // Продемонстрировать применение класса Ясаск<т>.
нагло Яувсевл пвтпЧ Яувсев.со11есг1опв.пепег1с с1авв Яепэсасхпево ( всаг1с тоги Ма1п() ( ягаси<вгг1пд> аг = пен ягаск<всг1пч>() вс . Рнлв (" один" ) л вс.рпвь("два")л 5Г.Роев( три )' вс.рпвн("четыре" )) вс.рпвн("пять")) ни11е(вг.ооспс > О) ( всг1по всг = вс . гор () л Сопво1е.иг1ге(вгг + " "); ) Сопво1е.нг1се11пе()л ) ) При выполнении этой программы получается следующий результат: пять четыре три два один Класс Яиеие(~> Класс ()пепе<т> является обобщенным эквивалентом класса необобщенной коллекции Свесе. В нем поддерживается очередь в виде списка, действующего по принципу: первым пришел — первым обслужен. В этом классе реализуются интерфейсы ТСо11есттоп„ 1ЕпцвегаЬ1е и 1ЕппвегаЬ1е<т>.
Кроме того, в классе Спепе<т> непосредственно реализуются методы С1еаг (), сопса1пэ () и соруто (), определенные в интерфейсе тсо11есс1оп<т>. А методы дг)с) () и невоче () в этом классе не поддерживаются, как, впрочем, и свойство 1внеа()оп1у. Коллекция класса Спепе<т> имеет динамический характер, расширяясь по мере необходимости, чтобы вместить все элементы, которые должны храниться в ней. В классе Спепе<т> определяются следующие конструкторы: рпш1с Свесе() рвш1с Свесе(1пг емкость) рпшьс Свесе(1Еппвегавте<Т> с) В первой форме конструктора создается пустая очередь с выбираемой по умолчанию первоначальной емкостью, а во второй форме — пустая очередь, первоначальный размер которой определяет емкость. И в третьей форме создается очередь, содержащая элементы указываемой коллекции с.
Ее первоначальная емкость равна количеству указанных элементов. В классе Спеце <Т> определяется ряд собственных методов, помимо тех, что уже объявлены в интерфейсах, которые в нем реализуются, а также в интерфейсе 1со11есстоп<т>. Некоторые из наиболее употребительных методов этого класса перечислены в табл. 24.20.
В88 Часть П. Библиотека Са Как и в классе ()иеие, эти методы обычно применяются следующим образом. Для того чтобы поместить объект в очередь, вызывается метод Епс(иене () . Если требуется извлечь и удалить первый объект из начала очереди, то вызывается метод Оес(иеие () . Если же требуется извлечь, ио ие удалять следующий объект из очереди, то вызывается метод Рее)с () .