Queue Class

Definition

Представляет коллекцию объектов, основанную на принципе «первым поступил — первым обслужен».Represents a first-in, first-out collection of objects.

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.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public class Queue : ICloneable, System.Collections.ICollection
type Queue = class
    interface ICollection
    interface IEnumerable
type Queue = class
    interface ICollection
    interface IEnumerable
    interface ICloneable
type Queue = class
    interface ICollection
    interface ICloneable
    interface IEnumerable
Public Class Queue
Implements ICollection
Public Class Queue
Implements ICloneable, ICollection
Inheritance
Queue
Attributes
Implements

Examples

В следующем примере показано, как создать и добавить значения в Queue и распечатать его значения.The following example shows how to create and add values to a Queue and how to print out its values.

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    !

Remarks

Этот класс реализует очередь в виде циклического массива.This class implements a queue as a circular array. Объекты, хранящиеся в Queue, вставляются в один конец и удаляются из другого.Objects stored in a Queue are inserted at one end and removed from the other.

Important

Не рекомендуется использовать класс Queue для новой разработки.We don't recommend that you use the Queue class for new development. Вместо этого рекомендуется использовать универсальный класс Queue<T>.Instead, we recommend that you use the generic Queue<T> class. Дополнительные сведения см. в разделе неуниверсальные коллекции не следует использовать в GitHub.For more information, see Non-generic collections shouldn't be used on GitHub.

Очереди и стеки полезны, если для хранения данных требуется временное хранилище. то есть, когда может потребоваться отменить элемент после получения его значения.Queues and stacks are useful when you need temporary storage for information; that is, when you might want to discard an element after retrieving its value. Используйте Queue, если необходимо получить доступ к данным в том же порядке, в котором они хранятся в коллекции.Use Queue if you need to access the information in the same order that it is stored in the collection. Используйте Stack, если необходимо получить доступ к данным в обратных последовательностях.Use Stack if you need to access the information in reverse order. Используйте ConcurrentQueue<T> или ConcurrentStack<T>, если требуется одновременный доступ к коллекции из нескольких потоков.Use ConcurrentQueue<T> or ConcurrentStack<T> if you need to access the collection from multiple threads concurrently.

В Queue и его элементах можно выполнять три основные операции:Three main operations can be performed on a Queue and its elements:

  • Enqueue добавляет элемент в конец Queue.Enqueue adds an element to the end of the Queue.

  • Dequeue удаляет самый старый элемент с начала Queue.Dequeue removes the oldest element from the start of the Queue.

  • Peek возвращает самый старый элемент, который находится в начале Queue но не удаляет его из Queue.Peek returns the oldest element that is at the start of the Queue but does not remove it from the Queue.

Емкость Queue — число элементов, которые может содержать Queue.The capacity of a Queue is the number of elements the Queue can hold. При добавлении элементов в Queueемкость автоматически увеличивается по мере необходимости путем перераспределения.As elements are added to a Queue, the capacity is automatically increased as required through reallocation. Емкость можно уменьшить, вызвав TrimToSize.The capacity can be decreased by calling TrimToSize.

Коэффициент роста — это число, на которое умножается текущая емкость, если требуется большая емкость.The growth factor is the number by which the current capacity is multiplied when a greater capacity is required. Коэффициент роста определяется при создании Queue.The growth factor is determined when the Queue is constructed. Коэффициент роста по умолчанию — 2,0.The default growth factor is 2.0. Емкость Queue всегда будет увеличиваться по крайней мере как минимум четырьмя, независимо от коэффициента роста.The capacity of the Queue will always increase by at least a minimum of four, regardless of the growth factor. Например, Queue с коэффициентом роста 1,0 всегда будет увеличивать емкость на четыре, если требуется больше ресурсов.For example, a Queue with a growth factor of 1.0 will always increase in capacity by four when a greater capacity is required.

Queue принимает null как допустимое значение и допускает дублирование элементов.Queue accepts null as a valid value and allows duplicate elements.

Общие сведения о версии этой коллекции см. в разделе System.Collections.Generic.Queue<T>For the generic version of this collection, see System.Collections.Generic.Queue<T>

Constructors

Queue()

Инициализирует новый пустой экземпляр класса Queue с заданными по умолчанию исходной емкостью и коэффициентом роста.Initializes a new instance of the Queue class that is empty, has the default initial capacity, and uses the default growth factor.

Queue(ICollection)

Инициализирует новый экземпляр класса Queue, содержащий элементы, скопированные из указанной коллекции, и обладающий начальной емкостью, равной количеству скопированных элементов, и заданным по умолчанию коэффициентом роста.Initializes a new instance of the Queue class that contains elements copied from the specified collection, has the same initial capacity as the number of elements copied, and uses the default growth factor.

Queue(Int32)

Инициализирует новый пустой экземпляр класса Queue с указанной начальной емкостью и заданным по умолчанию коэффициентом роста.Initializes a new instance of the Queue class that is empty, has the specified initial capacity, and uses the default growth factor.

Queue(Int32, Single)

Инициализирует новый пустой экземпляр класса Queue с указанными начальной емкостью и коэффициентом роста.Initializes a new instance of the Queue class that is empty, has the specified initial capacity, and uses the specified growth factor.

Properties

Count

Получает количество элементов, содержащихся в Queue.Gets the number of elements contained in the Queue.

IsSynchronized

Возвращает значение, указывающее, является ли доступ к коллекции Queue синхронизированным (потокобезопасным).Gets a value indicating whether access to the Queue is synchronized (thread safe).

SyncRoot

Возвращает объект, который может быть использован для синхронизации доступа к коллекции Queue.Gets an object that can be used to synchronize access to the Queue.

Methods

Clear()

Удаляет все объекты из Queue.Removes all objects from the Queue.

Clone()

Создает неполную копию Queue.Creates a shallow copy of the Queue.

Contains(Object)

Определяет, входит ли элемент в коллекцию Queue.Determines whether an element is in the Queue.

CopyTo(Array, Int32)

Копирует элементы коллекции Queue в существующий одномерный массив Array, начиная с указанного значения индекса массива.Copies the Queue elements to an existing one-dimensional Array, starting at the specified array index.

Dequeue()

Удаляет объект из начала очереди Queue и возвращает его.Removes and returns the object at the beginning of the Queue.

Enqueue(Object)

Добавляет объект в конец коллекции Queue.Adds an object to the end of the Queue.

Equals(Object)

Определяет, равен ли заданный объект текущему объекту.Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetEnumerator()

Возвращает перечислитель, служащий для прохода по коллекции Queue.Returns an enumerator that iterates through the Queue.

GetHashCode()

Служит хэш-функцией по умолчанию.Serves as the default hash function.

(Inherited from Object)
GetType()

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

(Inherited from Object)
MemberwiseClone()

Создает неполную копию текущего объекта Object.Creates a shallow copy of the current Object.

(Inherited from Object)
Peek()

Возвращает объект, находящийся в начале очереди Queue, но не удаляет его.Returns the object at the beginning of the Queue without removing it.

Synchronized(Queue)

Возвращает новый объект Queue, заключает исходную очередь в оболочку и является потокобезопасным.Returns a new Queue that wraps the original queue, and is thread safe.

ToArray()

Копирует элементы Queue в новый массив.Copies the Queue elements to a new array.

ToString()

Возвращает строку, представляющую текущий объект.Returns a string that represents the current object.

(Inherited from Object)
TrimToSize()

Задает значение емкости, равное действительному количеству элементов в Queue.Sets the capacity to the actual number of elements in the Queue.

Extension Methods

Cast<TResult>(IEnumerable)

Приводит элементы объекта IEnumerable к заданному типу.Casts the elements of an IEnumerable to the specified type.

OfType<TResult>(IEnumerable)

Выполняет фильтрацию элементов объекта IEnumerable по заданному типу.Filters the elements of an IEnumerable based on a specified type.

AsParallel(IEnumerable)

Позволяет осуществлять параллельный запрос.Enables parallelization of a query.

AsQueryable(IEnumerable)

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

Applies to

Thread Safety

Открытые статические (Shared в Visual Basic) члены этого типа являются потокобезопасными.Public static (Shared in Visual Basic) members of this type are thread safe. Потокобезопасная работа с членами экземпляров типа не гарантируется.Any instance members are not guaranteed to be thread safe.

Чтобы обеспечить потокобезопасность Queue, все операции должны выполняться через оболочку, возвращенную методом Synchronized(Queue).To guarantee the thread safety of the Queue, all operations must be done through the wrapper returned by the Synchronized(Queue) method.

Перечисление коллекции не является потокобезопасной процедурой.Enumerating through a collection is intrinsically not a thread-safe procedure. Даже если коллекция синхронизирована, другие потоки могут ее изменить, что приведет к тому, что перечислитель создаст исключение.Even when a collection is synchronized, other threads can still modify the collection, which causes the enumerator to throw an exception. Для обеспечения потокобезопасности при перечислении можно либо заблокировать коллекцию на все время перечисления, либо перехватывать исключения, возникающие в результате изменений, внесенных другими потоками.To guarantee thread safety during enumeration, you can either lock the collection during the entire enumeration or catch the exceptions resulting from changes made by other threads.

See also