Queue<T>.Enqueue(T) 方法
定义
public:
void Enqueue(T item);
public void Enqueue (T item);
member this.Enqueue : 'T -> unit
Public Sub Enqueue (item As T)
参数
- item
- T
要添加到 Queue<T> 的对象。The object to add to the Queue<T>. 对于引用类型,该值可以为 null。The value can be null for reference types.
示例
下面的代码示例演示了泛型类的若干方法 Queue<T> ,包括 Enqueue 方法。The following code example demonstrates several methods of the Queue<T> generic class, including the Enqueue method.
此代码示例创建具有默认容量的字符串队列,并使用 Enqueue 方法将五个字符串进行排队。The code example creates a queue of strings with default capacity and uses the Enqueue method to queue five strings. 枚举队列的元素,而不会更改队列的状态。The elements of the queue are enumerated, which does not change the state of the queue. Dequeue方法用于取消对第一个字符串的排队。The Dequeue method is used to dequeue the first string. Peek方法用于查看队列中的下一项,然后 Dequeue 使用方法将其取消排队。The Peek method is used to look at the next item in the queue, and then the Dequeue method is used to dequeue it.
ToArray方法用于创建数组,并将队列元素复制到该数组,然后将数组传递给 Queue<T> 采用的构造函数 IEnumerable<T> ,创建队列的副本。The ToArray method is used to create an array and copy the queue elements to it, then the array is passed to the Queue<T> constructor that takes IEnumerable<T>, creating a copy of the queue. 将显示副本的元素。The elements of the copy are displayed.
创建队列大小两倍的数组,并 CopyTo 使用方法从数组中间开始复制数组元素。An array twice the size of the queue is created, and the CopyTo method is used to copy the array elements beginning at the middle of the array. 在 Queue<T> 开始时,将再次使用构造函数来创建包含三个 null 元素的队列的第二个副本。The Queue<T> constructor is used again to create a second copy of the queue containing three null elements at the beginning.
Contains方法用于显示字符串 "四" 位于队列的第一个副本中,在此之后, Clear 方法会清除副本, Count 属性显示该队列为空。The Contains method is used to show that the string "four" is in the first copy of the queue, after which the Clear method clears the copy and the Count property shows that the queue is empty.
using System;
using System.Collections.Generic;
class Example
{
public static void Main()
{
Queue<string> numbers = new Queue<string>();
numbers.Enqueue("one");
numbers.Enqueue("two");
numbers.Enqueue("three");
numbers.Enqueue("four");
numbers.Enqueue("five");
// A queue can be enumerated without disturbing its contents.
foreach( string number in numbers )
{
Console.WriteLine(number);
}
Console.WriteLine("\nDequeuing '{0}'", numbers.Dequeue());
Console.WriteLine("Peek at next item to dequeue: {0}",
numbers.Peek());
Console.WriteLine("Dequeuing '{0}'", numbers.Dequeue());
// Create a copy of the queue, using the ToArray method and the
// constructor that accepts an IEnumerable<T>.
Queue<string> queueCopy = new Queue<string>(numbers.ToArray());
Console.WriteLine("\nContents of the first copy:");
foreach( string number in queueCopy )
{
Console.WriteLine(number);
}
// Create an array twice the size of the queue and copy the
// elements of the queue, starting at the middle of the
// array.
string[] array2 = new string[numbers.Count * 2];
numbers.CopyTo(array2, numbers.Count);
// Create a second queue, using the constructor that accepts an
// IEnumerable(Of T).
Queue<string> queueCopy2 = new Queue<string>(array2);
Console.WriteLine("\nContents of the second copy, with duplicates and nulls:");
foreach( string number in queueCopy2 )
{
Console.WriteLine(number);
}
Console.WriteLine("\nqueueCopy.Contains(\"four\") = {0}",
queueCopy.Contains("four"));
Console.WriteLine("\nqueueCopy.Clear()");
queueCopy.Clear();
Console.WriteLine("\nqueueCopy.Count = {0}", queueCopy.Count);
}
}
/* This code example produces the following output:
one
two
three
four
five
Dequeuing 'one'
Peek at next item to dequeue: two
Dequeuing 'two'
Contents of the copy:
three
four
five
Contents of the second copy, with duplicates and nulls:
three
four
five
queueCopy.Contains("four") = True
queueCopy.Clear()
queueCopy.Count = 0
*/
Imports System.Collections.Generic
Module Example
Sub Main
Dim numbers As New Queue(Of String)
numbers.Enqueue("one")
numbers.Enqueue("two")
numbers.Enqueue("three")
numbers.Enqueue("four")
numbers.Enqueue("five")
' A queue can be enumerated without disturbing its contents.
For Each number As String In numbers
Console.WriteLine(number)
Next
Console.WriteLine(vbLf & "Dequeuing '{0}'", numbers.Dequeue())
Console.WriteLine("Peek at next item to dequeue: {0}", _
numbers.Peek())
Console.WriteLine("Dequeuing '{0}'", numbers.Dequeue())
' Create a copy of the queue, using the ToArray method and the
' constructor that accepts an IEnumerable(Of T).
Dim queueCopy As New Queue(Of String)(numbers.ToArray())
Console.WriteLine(vbLf & "Contents of the first copy:")
For Each number As String In queueCopy
Console.WriteLine(number)
Next
' Create an array twice the size of the queue, compensating
' for the fact that Visual Basic allocates an extra array
' element. Copy the elements of the queue, starting at the
' middle of the array.
Dim array2((numbers.Count * 2) - 1) As String
numbers.CopyTo(array2, numbers.Count)
' Create a second queue, using the constructor that accepts an
' IEnumerable(Of T).
Dim queueCopy2 As New Queue(Of String)(array2)
Console.WriteLine(vbLf & _
"Contents of the second copy, with duplicates and nulls:")
For Each number As String In queueCopy2
Console.WriteLine(number)
Next
Console.WriteLine(vbLf & "queueCopy.Contains(""four"") = {0}", _
queueCopy.Contains("four"))
Console.WriteLine(vbLf & "queueCopy.Clear()")
queueCopy.Clear()
Console.WriteLine(vbLf & "queueCopy.Count = {0}", _
queueCopy.Count)
End Sub
End Module
' This code example produces the following output:
'
'one
'two
'three
'four
'five
'
'Dequeuing 'one'
'Peek at next item to dequeue: two
'
'Dequeuing 'two'
'
'Contents of the copy:
'three
'four
'five
'
'Contents of the second copy, with duplicates and nulls:
'
'
'
'three
'four
'five
'
'queueCopy.Contains("four") = True
'
'queueCopy.Clear()
'
'queueCopy.Count = 0
注解
如果 Count 已等于容量,则会 Queue<T> 自动重新分配内部数组,并将现有元素复制到新数组,然后再添加新的元素。If Count already equals the capacity, the capacity of the Queue<T> is increased by automatically reallocating the internal array, and the existing elements are copied to the new array before the new element is added.
如果 Count 小于内部数组的容量,则此方法是 O (1) 操作。If Count is less than the capacity of the internal array, this method is an O(1) operation. 如果需要重新分配内部数组以容纳新元素,则此方法将变成 O (n) 操作,其中 n 是 Count 。If the internal array needs to be reallocated to accommodate the new element, this method becomes an O(n) operation, where n is Count.