Queue Queue Queue Queue Class

Определение

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

public ref 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 ICloneable
    interface IEnumerable
Public Class Queue
Implements ICloneable, ICollection
Наследование
QueueQueueQueueQueue
Атрибуты
Реализации

Примеры

Приведенный ниже показано, как создать и добавить их 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
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 'Main

    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 'PrintValues

End Class 'SamplesQueue


' 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() Queue() 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(ICollection) Queue(ICollection) 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(Int32) Queue(Int32) 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(Int32, Single) Queue(Int32, Single) 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 Count Count Count

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

IsSynchronized IsSynchronized IsSynchronized IsSynchronized

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

SyncRoot SyncRoot SyncRoot SyncRoot

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

Методы

Clear() Clear() Clear() Clear()

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

Clone() Clone() Clone() Clone()

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

Contains(Object) Contains(Object) Contains(Object) Contains(Object)

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

CopyTo(Array, Int32) CopyTo(Array, Int32) CopyTo(Array, Int32) CopyTo(Array, Int32)

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

Dequeue() Dequeue() Dequeue() Dequeue()

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

Enqueue(Object) Enqueue(Object) Enqueue(Object) Enqueue(Object)

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

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

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

(Inherited from Object)
GetEnumerator() GetEnumerator() GetEnumerator() GetEnumerator()

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

GetHashCode() GetHashCode() GetHashCode() GetHashCode()

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

(Inherited from Object)
GetType() GetType() GetType() GetType()

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

(Inherited from Object)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

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

(Inherited from Object)
Peek() Peek() Peek() Peek()

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

Synchronized(Queue) Synchronized(Queue) Synchronized(Queue) Synchronized(Queue)

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

ToArray() ToArray() ToArray() ToArray()

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

ToString() ToString() ToString() ToString()

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

(Inherited from Object)
TrimToSize() TrimToSize() TrimToSize() TrimToSize()

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

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

Cast<TResult>(IEnumerable) Cast<TResult>(IEnumerable) Cast<TResult>(IEnumerable) Cast<TResult>(IEnumerable)

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

OfType<TResult>(IEnumerable) OfType<TResult>(IEnumerable) OfType<TResult>(IEnumerable) OfType<TResult>(IEnumerable)

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

AsParallel(IEnumerable) AsParallel(IEnumerable) AsParallel(IEnumerable) AsParallel(IEnumerable)

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

AsQueryable(IEnumerable) AsQueryable(IEnumerable) AsQueryable(IEnumerable) 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.

Дополнительно