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 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 !
Комментарии
Этот класс реализует очередь в виде кругового массива. Объекты, хранящиеся в a, Queue вставляются в один конец и удаляются из другого.
Important
Мы не рекомендуем использовать Queue класс для новой разработки. Вместо этого рекомендуется использовать универсальный Queue<T> класс. Дополнительные сведения см. в статье, не относящийся к универсальным коллекциям, которые не должны использоваться на сайте GitHub.
Очереди и стеки полезны, если требуется временное хранилище для информации; То есть, когда может потребоваться отменить элемент после извлечения его значения. Используйте Queue , если вам нужно получить доступ к данным в том же порядке, что он хранится в коллекции. Используйте, Stack если вам нужно получить доступ к информации в обратном порядке. Используйте ConcurrentQueue<T> или ConcurrentStack<T> , если необходимо получить доступ к коллекции из нескольких потоков одновременно.
Три основных операции можно выполнять с элементами:Queue
Dequeue Удаляет самый старый элемент из начала Queueэлемента .
Peek возвращает самый старый элемент, который находится в начале, Queue но не удаляет его из Queue.
Емкость Queue — это количество элементов, которые Queue могут храниться. Так как элементы добавляются в объект Queue, емкость автоматически увеличивается по мере необходимости при перемещении. Емкость можно уменьшить путем вызова TrimToSize.
Коэффициент роста — это число, с помощью которого текущая емкость умножается при необходимости большей емкости. Фактор роста определяется при Queue построении. Коэффициент роста по умолчанию — 2.0. Емкость Queue всегда увеличивается по крайней мере на четыре, независимо от фактора роста. Например, Queue увеличение емкости на 1,0 всегда увеличивается на четыре, если требуется больше емкости.
Queue
null принимает в качестве допустимого значения и разрешает повторяющиеся элементы.
Универсальные версии этой коллекции см. в разделе System.Collections.Generic.Queue<T>
Конструкторы
| Имя | Описание |
|---|---|
| Queue() |
Инициализирует новый экземпляр Queue класса, который является пустым, имеет начальную емкость по умолчанию и использует коэффициент роста по умолчанию. |
| Queue(ICollection) |
Инициализирует новый экземпляр Queue класса, который содержит элементы, скопированные из указанной коллекции, имеет ту же начальную емкость, что и количество скопированных элементов и использует коэффициент роста по умолчанию. |
| Queue(Int32, Single) |
Инициализирует новый экземпляр Queue класса, который является пустым, имеет указанную начальную емкость и использует указанный коэффициент роста. |
| Queue(Int32) |
Инициализирует новый экземпляр 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. |
Методы расширения
| Имя | Описание |
|---|---|
| AsParallel(IEnumerable) |
Включает параллелизацию запроса. |
| AsQueryable(IEnumerable) |
Преобразует IEnumerable в IQueryable. |
| Cast<TResult>(IEnumerable) |
Приведение элементов IEnumerable к указанному типу. |
| OfType<TResult>(IEnumerable) |
Фильтрует элементы IEnumerable на основе указанного типа. |
Применяется к
Потокобезопасность
Общедоступные статические (Shared в Visual Basic) элементы этого типа являются потокобезопасны. Никакие члены экземпляра не гарантированы как потокобезопасные.
Чтобы гарантировать безопасность Queueпотока, все операции должны выполняться с помощью оболочки, возвращаемой методом Synchronized(Queue) .
Перечисление через коллекцию по сути не является потокобезопасной процедурой. Даже если коллекция синхронизирована, другие потоки по-прежнему могут изменять коллекцию, что приводит к возникновению исключения перечислителем. Чтобы гарантировать безопасность потоков во время перечисления, можно заблокировать коллекцию во время всего перечисления или поймать исключения, полученные из изменений, внесенных другими потоками.