Г. Шилдт - С#4.0 Полное руководство (1160795), страница 192
Текст из файла (страница 192)
Многим из нас нередко приходилось стоять в очередях к кассе в банке, магазине или столовой. В программировании очереди применяются для хранения таких элементов, как процессы, выполняющиеся в данный момент в системе, списки приостановленных транзакций в базе данных или пакеты данных, полученные по Интернету. Кроме того, очереди нередко применяются в области имитационного моделирования. Класс коллекции, поддерживающий очередь, носит название Спеце.
В нем реализуются интерфейсы 1Со11есг1оп, 1ЕпцгаегаЫе и 1С1опеаЫе. Этот класс создает динамическую коллекцию, которая расширяется, если в ней необходимо хранить вводимые элементы. Так, если в очереди требуется свободное место, ее размер увеличивается на коэффициент роста, который по умолчанию равен 2,0. В классе Спеце определяются приведенные ниже конструкторы.
РиЫ1с Свече () рчЫгс Свече (гпг сарасгГУ) рчЫгс Оиеые (ъпг сарасггу, 11оаг дгоикасгог) РиЫда Свече (Гсо11есгьсп сЫ) Таблица 28.8. Наиболее часто используемые методы, определенные в классе ()пей Метод Описание РцЫдс чдгваа1 тго1г) С1еаг () Устанавливает свойство соцпс равным нулю, очи- щая, по существу, очередь Возвращает логическое значение сгце, если объ- ект оЬб содержится в вызывающей очереди, а ина- че — логическое значение Га1ае Возвращает объект из начала вызывающей очере- ди.
Возвращаемый объект удаляется из очереди Добавляет обьект оЬ) в конец очереди рцЬ11с гг1ггца1 Ьоо1 Сопга1пз(оЬбесг оЬ)) РцЬ11с ч1ггца1 оЬ)есг Рес(цеце() рцЫ1с ч1гсоа1 гго1с) Епццеце(оЬбесг оЬ)) В первой форме конструктора создается пустая очередь с выбираемыми по умолчанию емкостью и коэффициентом роста 2,0. Во второй форме создается пустая очередь, первоначальный размер которой определяет емкость, задаваемая параметром сара сг Су, а коэффициент роста по умолчанию выбирается для нее равным 2,0.
В третьей форме допускается указывать не только емкость (в качестве параметра сара су су), но и коэффициент роста создаваемой очереди (в качестве параметра дгоиГасгос в пределах от 1,0 до 10,0). И в четвертой форме создается очередь, состоящая из элементов указываемой коллекции со1. Ее первоначальная емкость равна количеству указанных элементов, а коэффициент роста'по умолчанию выбирается для нее равным 2,0. В классе Спеце определяется ряд собственных методов, помимо тех, что уже объявлены в интерфейсах, которые в нем реализуются. Некоторые из наиболее часто используемых методов этого класса перечислены в табл. 25.8. Эти методы обычно применяются следующим образом.
Для того чтобы поместить объект в очередь, вызывается метод Епс(цеце ( ) . Если требуется извлечь и удалить первый объект из начала очереди, то вызывается метод Рег)цеце () . Если же требуется извлечь, но не удалять следующий объект из очереди, то вызывается метод Реех () . А если методы Рес(цеце () и РееК () вызываются, когда очередь пуста, то генерируется исключение 1пча11с(Орегаг1опЕхсерг1оп. Глава 25. Коллекции, первчислители и итераторы 949 Окончание табл. 25.5 Метод Описание риЬ11с чуггиа1 оЬбесг Рее)с О Возвращает объект из начала вызывающей очере- ди, но не удаляет его Возвращает синхронизированный вариант коллек- ции типа 0иеие, передаваемой в качестве параме- тра сгиеие Возвращает массив, который содержит копии эле- ментов из вызывающей очереди устанавливает значение свойства Сарас1су рав- нъ|м значению свойства соипс риЬ11с ясат1С Оиеие ЯупсЛгоп1вес) Яиеие стиеие) риЬ11с ч1ггиа1 оЬбесс(] тодггау О рибдгс чуггиа1 чо1с) Тг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е.
Хгьсеъгпе () В приведенном ниже примере программы демонстрируется применение класса 0иеие. 950 Часть ]1. Бибяистека С() ЯЛоивпя(Ч, 22)З БЛоиЕпЧ(Ч, 65)з ЯЛоиЕЛЧ(Ч, 91); ЯпоипеЧ(Ч); ЯЛоипеЧ(Ч); БЛоиоеЧ(Ч): сту ( БдоиоеЧ(Ч)' ) пасов (1пча11с(ОрегагтопЕхсергз.оп) ( Сопзо1е.нг1пеЬзпе("Очередь пуста."); ) ) Эта программа дает следующий результат. Оесрзеие -> Очередь пуста. Хранение отдельных битов в классе коллекции ВШ~хтау Класс в1ь Аггау служит для хранения отдельных битов в коллекции. А поскольку в коллекции этого класса хранятся биты, а не объекты, то своими возможностями он отличается от классов других коллекций. Тем не менее в классе В1ЬАггау реализуются интерфейсы 1Со11ест1оп и 1ЕпивзегаЬ1е как основополагающие элементы поддержки всех типов коллекций.
Кроме того, в классе ВЯСАггау реализуется интерфейс 1С1опеаЬ1е. В классе ВЯЬАтгау определено несколько конструкторов. Так, с помощью приведенного ниже конструктора можно сконструировать объект типа ВЕЛА г та у из массива логических значений. риЬ1зо Взьатгау (Ьоо1 [] иа1иез) В данном случае каждый элемент массива иа1иез становится отдельным битом в коллекции. Это означает, что каждому элементу массива ча1иез соответствует отдельный бит в коллекции. Более того, порядок расположения элементов в массиве иа1иез сохраняется и в коллекции соответствующих им битов. Коллекцию типа ВЯСАггау можно также составить из массива байтов, используя следующий конструктор.
риЬ11о В1ПАттау (Ьусе ( ) Ьу без) Поместить в очередь Содержимое очереди: Поместить в очередь Содержимое очереди: Поместить в очередь Содержимое очереди: Извлечь из очереди: Содержимое очереди: Извлечь из очереди: Содержимое очереди: Извлечь из очереди: Содержимое очереди: Извлечь из очереди: Епсрзеие (22) 22 Епсрзеие(65) 22 65 Епсрзеие(91) 22 65 91 Оесрзеие -> 22 65 91 Оесрзеие -> 65 91 Оесрзеие -> 91 Глава 25.
)(омекции, перечислители и итераторы 951 риЫьс В1ГАггау(1пс[ ] иа1иея) В данном случае элемент иа1иея[О] обозначает первые 32 бита, элемент иа1иея [1] — вторые 32 бита и т.д. С помощью следующего конструктора можно составить коллекцию типа Влгдгга у, указав ее конкретный размер: риЫьс Вгвхггау (ьпг 1епдсл) где 1епрСЬ обозначает количество битов в коллекции, которые инициализируются логическим значением Га1яе. В приведенном ниже конструкторе можно указать не только размер коллекции, но и первоначальное значение составляющих ее битов. риЫьс Вьслггау(ьпс 1епиГИ, Ьио1 г(етаи1суа1ие) В данном случае все биты в коллекции инициализируются значением с(еГаи1гуа1ие, передаваемым конструктору в качестве параметра. И наконец, новую коллекцию типа В1САггау можно создать из уже существующей, используя следующий конструктор.
риЬ11с В1ГАггау (Вгсвггау Ьгся) Вновь сконструированный объект будет содержать такое же количество битов, как и в указываемой коллекции Ь1 с я, а в остальном это будут две совершенно разные коллекции. Коллекции типа В1САггау подлежат индексированию. По каждому индексу указывается отдельный бит в коллекции, причем нулевой индекс обозначает младший бит.
В классе В1сдггау определяется ряд собственных методов, помимо тех, что уже объявлены в интерфейсах, которые в нем реализуются. Методы этого класса приведены в табл. 25.9. Обратите внимание на то, что в классе Въсдггау не поддерживается метод Я упспгопв вес[ () . Это означает, что для коллекций данного класса синхронизированная оболочка недоступна, а свойство 1ВБупспгопггег[ всегда имеет логическое значение га1яе. Тем не менее для управления доступом к коллекции типа В1САггау ее можно синхронизировать для объекта, предоставляемого упоминавшимся ранее свойством Бупсйоог. Таблица 25.9.
Методы, определенные в классе ВЕСАггау Метод Описание риЬ11с В1САггау Апг[(В1ЬАггау иа1ие) Выполняет операцию логического умножения И битов вызывающего объекта и комекции т а1ие. Возвращает комекцию типа ВВСАггау, содержащую результат Возвращает значение бита, указываемого по индексу зпгтех Выполняет операцию поразрядного логического отрицания НЕ битов вызывающей комекции и возвращаЕт КОМЕКцИЮ тИПа В1САггау, СОдЕржащуЮ рЕЗуЛЬтат риЫ1с Ьоо1 Век (1пг 1пс(ех) риЬ11с В1САггау Ног О Здесь битами в коллекции становится уже целый их набор из массива Ьугея, причем элемент Ьугея [О] обозначает первые 8 битов, элемент ЬуСея [1] — вторые 8 битов и т.д.
Аналогично, коллекцию типа Взгдггау можно составить из массива целочисленных значений, используя приведенный ниже конструктор. 952 Часть П. Библиотека С() Окончание табл. 25.9 Описание Метод рив11с В1гйггау Ог(ВЬГАггау иа1ие) В классе в 1г Агта у определяе гся т люке собственное свойство, помимо тех, что указаны в интерфейсах, которые в нем реализуются. риЫгс Ьпс ьепчгь ( десг яес; Свойство ЬеппСЬ позволяет установить или получить количество битов в коллекции.