Г. Шилдт - С# 3.0 Полное руководство. 2010 (1160798), страница 172
Текст из файла (страница 172)
// Продемонстрировать применение класса Ясаск. пзъпд Яузсев," пзъпд Яуясев.Со11ессъопзг с1взз 5свсирево ( ясасъс чо1С Японрпзп(зсасх зс, ъпс в) ( вс.ризи(а)Г Сопзо1е.йг1сеъ1пе("Поместить в стек: Рпвп(" ь в + ")"); Сопзо1е.йгъге("Содержимое стека: "); тогеасп(ъпс 1 гп зс) Сопзо1е.йг1се(1 + " ")) Сопзо1е.йг1геъьпе()г зсас1с чоъс ЯпонРор(ЯГвсх зс) ( Сопяо1е.йг1ге("Извлечь иэ стека: Рор -> ")г ъпс в = (1пс) зГ.Рор(); Сопзо1е.йг1сеь1пе(а)г Сопзо1е.йг).се("Содержимое стека: "); гогеасп(ьпс 1 1п зс) ющим образом.
Для того чтобы поместить объект на вершине стека, вызывается метод Рпзп () . А для того чтобы извлечь и удалить объект из вершины стека, вызывается метод Рор () . Если же объект требуется только извлечь, ио ие удалить из вершины стека, то вызывается метод РееМ () . А если вызвать метод Рор () или Рее)г (), когда вызывающий стек пуст, то сгеиерируется исключение 1пча1160регагвопехсерс1сп. Сопяо1е.игаса(1 + " ")г Сопяо1е.ыггпе11пз()г ) ятаттс то1г( Мвтп() ( Бпасх яп = пем Бтасх() Гогеаси(тпт 1 тп ят) Сопяо1е.Игаса(1 + " "); Сопяо1е.
Иг1те11пе (); БиомРпяь(яп, 22); Бьомрияа(ят, б5): Бломрпял(ят, 91); БаотРор (ят) л ЯьомРор (ят)( БвомРор(яя)л сту ( БьомРор(ят)( ) пасса (1пча11г(орегас1опвксерс1оп) ( Сопяо1е.Игттеьтпе("Стек пуст.")," ) Ниже приведен результат выполнения этой программы. Обратите внимание на то, как обрабатывается исключение тпча11бОрега11опьхсер11оп, генерируемое при попытке извлечь элемент из пустого стека. Рор -> Стек пуст. Класс Дие(зе Еще одной распространеиной структурой данных является очередь, действующая по принципу: первым пришел — первым обслужен.
Это означает, что первым из очереди извлекается элемент, помещенный в нее перва(м. Очереди часто встречаются в реальной жизни. Многим из нас нередко приходилось стоять в очередях к кассе в банке, магазине или столовой. В программировании очереди применяются для хранения таких элементов, как процессы, выполняющиеся в данный момент в системе, списки приостановленных транзакций в базе данных или пакеты данных, полученные по Интернету. Кроме того, очереди нередко применяются в области имитационного моделирования.
Поместить з стек: Содержимое стека." Поместить в стек: Содержимое стека: Поместить з стек: Содержимое стека: Извлечь из стека: Содержимое стека: Извлечь мз стека: Содержимое стека: Извлечь мз стека: Содержимое стека: Извлечь мз стека: Рпяи(22) 22 Рпяь(б5) б5 22 Рсяи(91) 91 65 22 Рор -> 91 б5 22 Рор -> б5 22 Рор -> 22 Глава 24. Коллекции, леречислители и итераторы 889 860 Часть П. Библиотека СЗ Класс коллекции, поддерживающий очередь, носит название спеце.
В ием реализуются интерфейсы 1СС11есСРоп, ХЕпцюегаЬ1е и 1С1опеаЬ1е. Этот класс создает динамическую коллекцию, которая расширяется, если в ией необходимо хранить вводимые элементы. Так, если в очереди требуется свободное место, ее размер увеличивается на коэффициент роста, который по умолчанию равен 2,0. В классе Оцеце определяются приведенные ниже конструкторы.
риЬ11с Соеие() ровьъс Соеое (ьпС емкость) роЬ11с Спеце (спС емкость, 11оаС коэффициент роста) рпЬ11с Счеие (1Со11ескьоп с) Таблица 24.8. Наиболее употребительные методы, определенные а классе ()цеце Описание Метод риЬ11с чъгСпа1 чота С1еаг() Устанавливает свойство соппс равным нулю, очищая, по существу, очередь риЬ11с ч1скиа1 Ьоо1 Сопеааоз(оЬ)есС ч) Возвращает логическое значение сгпе, если объект ч со- держится а вызывающей очереди, в противном случае— логическое значение Га1зе риьььс чъгсиа1 оЬбесс пециече() Возвращает объект из начала вызывающей очереди.
Возвращаемый объект удаляется из очереди рпьььс чсгСиа1 чака Епцпеие(оЬбесС ч) Добавляет объект ч в конец очереди риЬ11с чьгсиа1 оЬбесс РееК() Возвращает обьекг из начала вызывающей очереди, но не удаляет его рив11с зкаС1с ()чеие 5упспгопьсео(боече д) Возвращает синхронизированный вариант коллекции типа ачепе, передаваемой в качестве параметра и риЬ11с чсгспа1 оЬбесс[) тоаггау() Возвращает массив, который содержит копии элементов из вызывающей очереди рпЬ11с чьгСиа1 чо1О тт1ито51те() Устанавливает значение свойства сарасзсу равным зна- чению свойства соппс В первой форме конструктора создается пустая очередь с первоначальной емкостью 32 и выбираемым по умолчанию коэффициентом роста 2,0.
Во второй форме создается пустая очередь, первоначальный размер которой' определяет емкость, а коэффициент роста по умолчанию выбирается для иее равным 2,0. В третьей форме допускается ука- ' зывать ие только емкость, ио и коэффициент роста создаваемой очереди (в пределах от 1,0 до 10,0). И в четвертой форме создается очередь, состоящая из элементов указываемой коллекции с. Ее первоначальная емкость равна количеству указанных элементов, а коэффициент роста по умолчанию выбирается для иее равным 2,0. В классе Опепе определяется ряд собственных методов, помимо тех, что уже объявлены в интерфейсах, которые в ием реализуются.
Некоторые из наиболее употребительных методов этого класса перечислены в табл. 24.8. Эти методы обычно применяются следующим образом. Для того чтобы поместить объект в очередь, вызывается метод епс[пепе И. Если требуется извлечь и удалить первый объект из начала очереди, то вызывается метод пес[цеце () . Если же требуется извлечь, ио ие удалять следующий объект из очереди, то вызывается метод Рее)с () . А если методы пес)цеце () и Рее)с () вызываются, когда очередь пуста, то генерируется исключение 1пча11с[ОрегаС1опкхсерС1оп. Глава 24, Коллекции, перечислители и итераторы 861 В приведенном ниже примере программы демонстрируется применение класса (2пене.
// Продемонстрировать применение класса Очеие. ов1по Буясежт ов1пЧ Яувсеи.Со11есг1опят с1авя ()неоеоеио ( всасгс чо1О ЯнонкпЧ(Поем Ч, гпс а) ( Ч.Епчоене(а)т Сопво1е.йггсе11пе("Поместить з очередь: Епчпепе(" + а ь ")")т Сопво1е.йггсе("Содержимое очереди: ")с тогеас)с(1пс г 1п Ч) Сопво1е.йг1Ге(г + " ")) Сопяо1е.йггсепапе()) вгаггс чогс( 5)сонпеч(пнеие ч) ( сопяо1е.йг1ге("извлечь из очереди: Оечоече -> ")т гпс а = (апс) с(.печоепе()т Сопво1е.йггсе11пе(а) т Сопво1е.йг1ге("Содержимое очереди: ")т гогеас)с(1пг г гп Ч) Сопво1е.йг(се(1 + " ")' Сопво1е.йггсепапе()т ясасгс чо1с( Ма1п() ( ()пене Ч = пен Опепе() гогеас)т(1пс г 1п Ч) Сопяо1е.йг1Ге(1 + " ")т Сопво1е.
йг1Ге11пе () Бнонвпч(Ч, 22); БпонвпЧ(Ч, 65); 5)сонвпЧ(Ч, 91)т ЯП ОеЧ(Ч)т ЯноноеЧ(Ч)) яооноеч(ч)т ггу ( яноьпеЧ(Ч)т ) пасс)т (1пча11с(орегасгопЕхсерсгоп) ( сопяо1е.йг1гевапе("очередь пуста.")! ) ) 662 Часть П. Библиотека С№ Эта программа дает следующий результат: Оециеие -> Очередь пуста. Хранение отдельных битов в классе коллекции вх~Аггау Класс В1глггау служит для хранения отдельных битов в коллекции. А поскольку в коллекции этого класса хранятся биты, а не объекты, то своими возможностями он отличается от классов других коллекций. Тем не менее в классе В1гАггау реализуются интерфейсы 1Со11есг№оп и 1ЕпимегаЬ1е как основополагающие элементы поддержки всех типов коллекций. Кроме того, в классе В1гАггау реализуется интерфейс 1С1опеаЬ1е. В классе В1гдггау определено несколько конструкторов. Так, с помощью приведенного ниже конструктора можно сконструировать объект типа в№гАггау из массива логических значений.
риЬ11с Вкглггау(Ьоо1[] Ьхгв) В данном случае каждый элемент массива Ь№гз становится отдельным битом в коллекции. Это означает, что каждому элементу массива ь1 гэ соответствует отдельный бит в коллекции. Более того, порядок расположения элементов в массиве ЬЕ сэ сохраняется и в коллекции. соответствующих им битов. коллекцию типа в1гдггау можно также составить из массива байтов, используя следующий конструктор: риьг№с Вггхггау (ьуге[! ьхсл) Здесь битами в коллекции становится уже целый набор битов, причем элемент Ь1 г з [ О ! обозначает первые 8 битов, элемент Ь1 гз [1] — вторые 8 битов и т.д. Аналогично, коллекцию типа В1гАггау можно составить из массива целочисленных значений, используя приведенный ниже конструктор.
риьг№с В1глггау(тпг( ) Ькга) В данном случае элемент ЬЕ гз [О] обозначает первые 32 бита, элемент ьугз [1!— вторые 32 бита и т.д. С помощью следующего конструктора можно составить коллекцию типа В№гдггау, указав ее конкретный размер: риЬ1№с ВггАггау(1пг размер) Поместить в очередь Содержимое очереди: Поместить в очередь Содержимое очереди: Поместить в очерель Содержимое очереди: Извлечь из очереди: Содержимое очереди: Извлечь из очереди: Содержимое очереди: Извлечь из очереди: Содержимое очереди: Извлечь из очереди: Епциеие(22) 22 Епциеие(65) 22 65 Епяиеие(91) 22 65 91 Оес(иеие -> 22 65 91 Оециеие -> 65 91 Оециеие -> 91 Глава 24.)(оллакции, перечисли)ели и итераторы 863 рсЬ11с В1ГКггау(1пг размер, Ьоо1 ч) В данном случае все биты в коллекции инициализируются значением и, передаваемым конструктору в качестве параметра.
И наконец, новую коллекцию типа В1ГАггау можно создать из уже существующей, используя следующий конструктор: риЬ11с В1ГАггау(зьглггау Ьдсз) Вновь сконструированный объект будет содержать такое же количество битов, как и в указываемой коллекции ьг сз, а в остальном это будут дае совершенно разные коллекции. Коллекции типа ВЕСАггау подлежат индексированию. По каждому индексу указывается отдельный бит в коллекции, причем нулевой индекс обозначает младший бит. В классе В1САггау определяется ряд собственных методов, помимо тех, что уже объявлены в интерфейсах, которые в нем реализуются.
Методы этого класса приаедсны в табл. 24.9. Обратите внимание на то, что в классе В1САггау не поддерживается метод Бупспгоп1гег) () . Это означает, что для коллекций данного класса синхронизированная оболочка недоступна, а свойство 1эзупсьгопъзег) всегда имеет логическое значение га1эе.
Тем не менее для управления доступом к коллекции типа В1гдггау ее можно синхронизировать для обьекта, предоставляемого упоминавшимся ранее свойством яупсноос. )вблица 24.9. Методы, определенные в классе вйсдхгау Описание Метод рэЫ1с В1ГАггау Апг)(В1ГКггау Ьа) Выполняет операцию логического умножения И битов вызывающего объекта и коллекции ьа. Возвращает коллекцию типа в1гкггау, содержащую результат риЫ1с Ьоо1 Пег (ьпг уг(х) Возвращает значение бита, указываемого по индексу уг)х рчЫьс Вгглггау Ног() Выполняет операцию поразрядного логического отри- цания НЕ битов вызывающей коллекции и возвращает коллекцию типа в1слггау, содержащую результат Выполняет операцию логического сложения ИЛИ битов вызывающего объекта и коллекции ьа.
Возвращает коллекцию типа вг скггау, содержащую результат риЫ1с Вьслггау Ог (Вьслггау Ьа) риЫьс чолн Бес (ьпс Хсх, Ьоо1 ч) Устанавливает бит, указываемый по индексу дг)х, рав- ным значению ч риЬ11с чогг) ЗеГК11(Ьоо1 ч) риЫ1с В1САггау Хог(В1СКггау Ьа) Устанавливает все биты равными значению ч Выполняет логическую операцию исключающее ИЛИ над битами вызывающего объекта и коллекции ьа. Возвращает коллекцию типа в1глггау, СОДЕРжащую результат В классе в1сдггау определяется также собственное свойство, помимо тех, что указаны в интерфейсах, которые в нем реализуются: рагс ьпс Ьепчгп ( дегг эегг где размер обозначает количество битов в коллекции, которые инициализируются ло- гическим значением уа1эе.