Поделиться через


Queue Класс

Определение

Представляет коллекцию объектов, основанную на принципе «первым поступил — первым обслужен».

public ref class Queue : System::Collections::ICollection
public ref class Queue : ICloneable, System::Collections::ICollection
public class Queue : System.Collections.ICollection
public class Queue : ICloneable, System.Collections.ICollection
[System.Serializable]
public class Queue : ICloneable, System.Collections.ICollection
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public class Queue : ICloneable, System.Collections.ICollection
type Queue = class
    interface ICollection
    interface IEnumerable
type Queue = class
    interface ICollection
    interface IEnumerable
    interface ICloneable
[<System.Serializable>]
type Queue = class
    interface ICollection
    interface IEnumerable
    interface ICloneable
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type Queue = class
    interface ICollection
    interface IEnumerable
    interface ICloneable
Public Class Queue
Implements ICollection
Public Class Queue
Implements ICloneable, ICollection
Наследование
Queue
Атрибуты
Реализации

Примеры

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

using namespace System;
using namespace System::Collections;
void PrintValues( IEnumerable^ myCollection );
int main()
{
   
   // Creates and initializes a new Queue.
   Queue^ myQ = gcnew Queue;
   myQ->Enqueue( "Hello" );
   myQ->Enqueue( "World" );
   myQ->Enqueue( "!" );
   
   // Displays the properties and values of the Queue.
   Console::WriteLine( "myQ" );
   Console::WriteLine( "\tCount:    {0}", myQ->Count );
   Console::Write( "\tValues:" );
   PrintValues( myQ );
}

void PrintValues( IEnumerable^ myCollection )
{
   IEnumerator^ myEnum = myCollection->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      Object^ obj = safe_cast<Object^>(myEnum->Current);
      Console::Write( "    {0}", obj );
   }

   Console::WriteLine();
}

/* 
 This code produces the following output.
 
 myQ
     Count:    3
     Values:    Hello    World    !
*/
 using System;
 using System.Collections;
 public class SamplesQueue  {

    public static void Main()  {

       // Creates and initializes a new Queue.
       Queue myQ = new Queue();
       myQ.Enqueue("Hello");
       myQ.Enqueue("World");
       myQ.Enqueue("!");

       // Displays the properties and values of the Queue.
       Console.WriteLine( "myQ" );
       Console.WriteLine( "\tCount:    {0}", myQ.Count );
       Console.Write( "\tValues:" );
       PrintValues( myQ );
    }

    public static void PrintValues( IEnumerable myCollection )  {
       foreach ( Object obj in myCollection )
          Console.Write( "    {0}", obj );
       Console.WriteLine();
    }
 }
 /*
 This code produces the following output.

 myQ
     Count:    3
     Values:    Hello    World    !
*/
Imports System.Collections

Public Class SamplesQueue

    Public Shared Sub Main()

        ' Creates and initializes a new Queue.
        Dim myQ As New Queue()
        myQ.Enqueue("Hello")
        myQ.Enqueue("World")
        myQ.Enqueue("!")

        ' Displays the properties and values of the Queue.
        Console.WriteLine("myQ")
        Console.WriteLine("    Count:    {0}", myQ.Count)
        Console.Write("    Values:")
        PrintValues(myQ)

    End Sub

    Public Shared Sub PrintValues(myCollection As IEnumerable)
        Dim obj As [Object]
        For Each obj In  myCollection
            Console.Write("    {0}", obj)
        Next obj
        Console.WriteLine()
    End Sub

End Class


' This code produces the following output.
' 
' myQ
'     Count:    3
'     Values:    Hello    World    !

Комментарии

Этот класс реализует очередь в виде кругового массива. Объекты, хранящиеся в , Queue вставляются на одном конце и удаляются с другого.

Важно!

Мы не рекомендуем использовать класс для новой разработки Queue . Вместо этого рекомендуется использовать универсальный Queue<T> класс . Дополнительные сведения см. в статье Неуниверсивные коллекции не должны использоваться на GitHub.

Очереди и стеки полезны, когда требуется временное хранилище для информации; то есть, если может потребоваться отменить элемент после получения его значения. Используйте , Queue если вам нужно получить доступ к информации в том же порядке, что и в коллекции. Используйте , Stack если необходимо получить доступ к информации в обратном порядке. Используйте ConcurrentQueue<T> или ConcurrentStack<T> , если требуется одновременный доступ к коллекции из нескольких потоков.

С и его элементами можно выполнить Queue три main операции:

  • Enqueue добавляет элемент в конец Queue.

  • Dequeue Удаляет самый старый элемент из начала Queue.

  • Peek возвращает самый старый элемент, который находится в начале Queue , но не удаляет его из Queue.

Емкость Queue — это количество элементов, которые могут храниться в объекте Queue . При добавлении элементов в Queueемкость автоматически увеличивается по мере необходимости путем перераспределения. Емкость можно уменьшить, вызвав .TrimToSize

Коэффициент роста — это число, на которое умножается текущая емкость, когда требуется большая емкость. Коэффициент роста определяется при построении Queue . Коэффициент роста по умолчанию — 2,0. Емкость Queue всегда будет увеличиваться как минимум на четыре, независимо от коэффициента роста. Например, Queue объект с коэффициентом роста 1,0 всегда увеличивает емкость на четыре, если требуется большая емкость.

Queuenull принимает в качестве допустимого значения и разрешает дублировать элементы.

Общую версию этой коллекции см. в разделе System.Collections.Generic.Queue<T>

Конструкторы

Queue()

Инициализирует новый пустой экземпляр класса Queue с заданными по умолчанию исходной емкостью и коэффициентом роста.

Queue(ICollection)

Инициализирует новый экземпляр класса Queue, содержащий элементы, скопированные из указанной коллекции, и обладающий начальной емкостью, равной количеству скопированных элементов, и заданным по умолчанию коэффициентом роста.

Queue(Int32)

Инициализирует новый пустой экземпляр класса Queue с указанной начальной емкостью и заданным по умолчанию коэффициентом роста.

Queue(Int32, Single)

Инициализирует новый пустой экземпляр класса Queue с указанными начальной емкостью и коэффициентом роста.

Свойства

Count

Получает число элементов, содержащихся в интерфейсе Queue.

IsSynchronized

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

SyncRoot

Получает объект, с помощью которого можно синхронизировать доступ к коллекции Queue.

Методы

Clear()

Удаляет все объекты из Queue.

Clone()

Создает неполную копию Queue.

Contains(Object)

Определяет, входит ли элемент в коллекцию Queue.

CopyTo(Array, Int32)

Копирует элементы коллекции Queue в существующий одномерный массив Array, начиная с указанного значения индекса массива.

Dequeue()

Удаляет объект из начала очереди Queue и возвращает его.

Enqueue(Object)

Добавляет объект в конец коллекции Queue.

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
GetEnumerator()

Возвращает перечислитель, осуществляющий перебор элементов списка Queue.

GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetType()

Возвращает объект Type для текущего экземпляра.

(Унаследовано от Object)
MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
Peek()

Возвращает объект, находящийся в начале очереди Queue, но не удаляет его.

Synchronized(Queue)

Возвращает новый объект Queue, заключает исходную очередь в оболочку и является потокобезопасным.

ToArray()

Копирует элементы Queue в новый массив.

ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)
TrimToSize()

Задает значение емкости, равное действительному количеству элементов в Queue.

Методы расширения

Cast<TResult>(IEnumerable)

Приводит элементы объекта IEnumerable к заданному типу.

OfType<TResult>(IEnumerable)

Выполняет фильтрацию элементов объекта IEnumerable по заданному типу.

AsParallel(IEnumerable)

Позволяет осуществлять параллельный запрос.

AsQueryable(IEnumerable)

Преобразовывает коллекцию IEnumerable в объект IQueryable.

Применяется к

Потокобезопасность

Открытые статические (Shared в Visual Basic) члены этого типа являются потокобезопасными. Потокобезопасная работа с членами экземпляров типа не гарантируется.

Чтобы гарантировать потокобезопасность Queue, все операции должны выполняться через оболочку, возвращаемую методом Synchronized(Queue) .

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

См. также раздел