Queue Класс

Определение

Представляет коллекцию объектов, основанную на принципе «первым поступил — первым обслужен».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.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
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type Queue = class
    interface ICollection
    interface ICloneable
    interface IEnumerable
Public Class Queue
Implements ICollection
Public Class Queue
Implements ICloneable, ICollection
Наследование
Queue
Атрибуты
Реализации

Примеры

В следующем примере показано, как создать и добавить значения в 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    !

Комментарии

Этот класс реализует очередь в виде циклического массива.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.

Важно!

Мы не рекомендуем использовать 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>

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

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.

Свойства

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.

Методы

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.

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

Возвращает перечислитель, осуществляющий перебор элементов списка Queue.Returns an enumerator that iterates through the Queue.

GetHashCode()

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

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

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

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

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

(Унаследовано от 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.

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

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

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

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.

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

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

Открытые статические (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.

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