KnigaRead.com/
KnigaRead.com » Компьютеры и Интернет » Программирование » Герберт Шилдт - C# 4.0: полное руководство

Герберт Шилдт - C# 4.0: полное руководство

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Герберт Шилдт, "C# 4.0: полное руководство" бесплатно, без регистрации.
Перейти на страницу:

Таблица 25.8. Наиболее часто используемые методы, определенные в классе Queue


Метод - Описание


public virtual void Clear() - Устанавливает свойство Count равным нулю, очищая, по существу, очередь

public virtual bool Contains(object obj) - Возвращает логическое значение true, если объект obj содержится в вызывающей очереди, а иначе — логическое значение false

public virtual object Dequeue() - Возвращает объект из начала вызывающей очереди. Возвращаемый объект удаляется из очереди

public virtual void Enqueue(object obj) - Добавляет объект obj в конец очереди 

public virtual object Peek() - Возвращает объект из начала вызывающей очереди, но не удаляет его

public static Queue Synchronized(Queue queue) - Возвращает синхронизированный вариант коллекции типа Queue, передаваемой в качестве параметра queue

public virtual object[] ToArray() - Возвращает массив, который содержит копии элементов из вызывающей очереди

public virtual void TrimToSize() -  Устанавливает значение свойства Capacity равным значению свойства Count


В приведенном ниже примере программы демонстрируется применение класса

Queue.


// Продемонстрировать применение класса Queue.

using System;

using System.Collections;


class QueueDemo {

  static void ShowEnq(Queue q, int a) {

    q.Enqueue(a) ;


    Console.WriteLine("Поместить в очередь: Enqueue(" + a + ")");

    Console.Write("Содержимое очереди: ");

    foreach(int i in q)

      Console.Write(i + " ");


    Console.WriteLine() ;

  }


  static void ShowDeq(Queue q) {

    Console.Write("Извлечь из очереди: Dequeue -> ");

    int a = (int) q.Dequeue();


    Console.WriteLine(a);


    Console.Write("Содержимое очереди: ");

    foreach(int i in q)

      Console.Write(i + " ") ;


    Console.WriteLine();

  }


  static void Main() {

    Queue q = new Queue();

    foreach(int i in q)

      Console.Write(i + " ");


    ShowEnq(q, 22);

    ShowEnq(q, 65);

    ShowEnq(q, 91);

    ShowDeq(q);

    ShowDeq(q);

    ShowDeq(q);

    try {

      ShowDeq (q);

    } catch (InvalidOperationException) {

      Console.WriteLine("Очередь пуста.");

    }

  }

}


Эта программа дает следующий результат.


Поместить в очередь: Enqueue(22)

Содержимое очереди: 22

Поместить в очередь: Enqueue(65)

Содержимое очереди: 22 65

Поместить в очередь: Enqueue(91)

Содержимое очереди: 22 65 91

Извлечь из очереди: Dequeue -> 22

Содержимое очереди: 65 91

Извлечь из очереди: Dequeue -> 65

Содержимое очереди: 91

Извлечь из очереди: Dequeue -> 91

Содержимое очереди:

Извлечь из очереди: Dequeue -> Очередь пуста.


Хранение отдельных битов в классе коллекции BitArray

Класс BitArray служит для хранения отдельных битов в коллекции. А поскольку в коллекции этого класса хранятся биты, а не объекты, то своими возможностями он отличается от классов других коллекций. Тем не менее в классе BitArray реализуются интерфейсы ICollection и IEnumerable как основополагающие элементы поддержки всех типов коллекций. Кроме того, в классе BitArray реализуется интерфейс ICloneable.

В классе BitArray определено несколько конструкторов. Так, с помощью приведенного ниже конструктора можно сконструировать объект типа BitArray из массива логических значений.


public BitArray(bool[] values)


В данном случае каждый элемент массива values становится отдельным битом в коллекции. Это означает, что каждому элементу массива values соответствует отдельный бит в коллекции. Более того, порядок расположения элементов в массиве values сохраняется и в коллекции соответствующих им битов.

Коллекцию типа BitArray можно также составить из массива байтов, используя следующий конструктор.


public BitArray( byte[] bytes)


Здесь битами в коллекции становится уже целый их набор из массива bytes, причем элемент bytes [0] обозначает первые 8 битов, элемент bytes[1] — вторые 8 битов и т.д. Аналогично, коллекцию типа BitArray можно составить из массива целочисленных значений, используя приведенный ниже конструктор.


public BitArray(int[ ] values)


В данном случае элемент values[0] обозначает первые 32 бита, элемент values[1] — вторые 32 бита и т.д.

С помощью следующего конструктора можно составить коллекцию типа BitArray, указав ее конкретный размер:


public BitArray(int length)


где length обозначает количество битов в коллекции, которые инициализируются логическим значением false. В приведенном ниже конструкторе можно указать не только размер коллекции, но и первоначальное значение составляющих ее битов.


public BitArray(int length, bool defaultValue)


В данном случае все биты в коллекции инициализируются значением defaultValue, передаваемым конструктору в качестве параметра.

И наконец, новую коллекцию типа BitArray можно создать из уже существующей, используя следующий конструктор.


public BitArray(BitArray bits)


Вновь сконструированный объект будет содержать такое же количество битов, как и в указываемой коллекции bits, а в остальном это будут две совершенно разные коллекции.

Коллекции типа BitArray подлежат индексированию. По каждому индексу указывается отдельный бит в коллекции, причем нулевой индекс обозначает младший бит.

В классе BitArray определяется ряд собственных методов, помимо тех, что уже объявлены в интерфейсах, которые в нем реализуются. Методы этого класса приведены в табл. 25.9. Обратите внимание на то, что в классе BitArray не поддерживается метод Synchronized(). Это означает, что для коллекций данного класса синхронизированная оболочка недоступна, а свойство IsSynchronized всегда имеет логическое значение false. Тем не менее для управления доступом к коллекции типа BitArray ее можно синхронизировать для объекта, предоставляемого упоминавшимся ранее свойством SyncRoot.


Таблица 25.9. Методы, определенные в классе BitArray


Метод - Описание


public BitArray And(BitArray value) - Выполняет операцию логического умножения И битов вызывающего объекта и коллекции value. Возвращает коллекцию типа BitArray, содержащую результат

public bool Get(int index) - Возвращает значение бита, указываемого по индексу index

public  BitArray Not() - Выполняет операцию поразрядного логического отрицания НЕ битов вызывающей коллекции и возвращает коллекцию типа BitArray, содержащую результат

public BitArray Or(BitArray value) - Выполняет операцию логического сложения ИЛИ битов вызывающего объекта и коллекции value. Возвращает коллекцию типа BitArray, содержащую результат

public void Set (int index, bool value) - Устанавливает бит, указываемый по индексу index, равным значению value

public void SetAll(bool value) - Устанавливает все биты равными значению value

public BitArray Xor(BitArray value) - Выполняет логическую операцию исключающее ИЛИ над битами вызывающего объекта и коллекции value. Возвращает коллекцию типа BitArray, со-


В классе BitArray определяется также собственное свойство, помимо тех, что указаны в интерфейсах, которые в нем реализуются.


public int Length { get; set; }

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*