C# Cola (Queue)

C# 集合Colecciones de C#

En C#, Queue es una estructura de datos de primero en entrar, primero en salir (FIFO, First In First Out).

Queue pertenece a los espacios de nombres System.Collections o System.Collections.Generic, que proporcionan implementaciones no genéricas y genéricas respectivamente. Queue es adecuado para escenarios en los que los datos deben procesarse en el orden en que se encolan.

La cola (Queue) representa unacolección de objetos primero en entrar, primero en salir.Cuando necesite acceder a los elementos en orden FIFO, use una cola. Cuando agrega un elemento a la lista, se llamaencolar, cuando elimina un elemento de la lista, se llamadesencolar。

Características

  • Primero en entrar, primero en salir: el elemento que se agregó primero a la cola es el primero en eliminarse.
  • Tamaño dinámico: la capacidad de la cola se ajusta dinámicamente según sea necesario.
  • Soporte de genéricos: medianteQueue<T>se pueden almacenar elementos fuertemente tipados.
  • Seguridad de subprocesos:QueueEn sí misma no es segura para subprocesos, pero se puede usarConcurrentQueue<T>para implementar la seguridad de subprocesos.

Métodos y propiedades de la clase Queue

La siguiente tabla enumeraQueuealgunas de las propiedades de uso común de laclase Queue.:

Nombre de la propiedadTipoDescripción
CountintObtiene el número de elementos de la cola.
SyncRootobjectObtiene un objeto que se usa para sincronizar el acceso a la cola (no genérico).
IsSynchronizedboolIndica si el acceso a la cola está sincronizado (seguro para subprocesos, siempre esfalse)。

La siguiente tabla enumeraQueuealgunos de los métodos de uso común de laclase Queue.:

Nombre del métodoTipo de retornoDescripción
Operaciones con elementos
Enqueue(object item)voidAgrega un elemento al final de la cola.
Dequeue()objectElimina y devuelve el elemento al principio de la cola.
Peek()objectDevuelve el elemento al principio de la cola sin eliminarlo.
Clear()voidElimina todos los elementos de la cola.
Comprobación y copia
Contains(object item)boolDetermina si un elemento existe en la cola.
ToArray()object[]Copia los elementos de la cola en una nueva matriz.
Clone()objectCrea una copia superficial de la cola actual.
CopyTo(Array array, int index)voidCopia los elementos de la cola en una matriz existente, comenzando en el índice especificado.
Compatibilidad con enumeradores
GetEnumerator()IEnumeratorDevuelve un enumerador para recorrer los elementos de la cola.
Seguridad de subprocesos
Synchronized(Queue queue)QueueDevuelve un envoltorio de cola seguro para subprocesos.

Ejemplos

El siguiente ejemplo demuestra el uso de la cola (Queue):

Ejemplo 1

using System;
using System.Collections;

class Program
{
    static void Main()
    {
        Queue queue = new Queue();

        // Agregar elemento
        queue.Enqueue("First");
        queue.Enqueue("Second");
        queue.Enqueue("Third");

        // Ver el frente de la cola
        Console.WriteLine($"Peek: {queue.Peek()}"); // Salida: First

        // Eliminar elemento
        Console.WriteLine($"Dequeue: {queue.Dequeue()}"); // Salida: First

        // Elementos restantes
        foreach (var item in queue)
        {
            Console.WriteLine(item); // Salida: Second, Third
        }

        // Comprobar si contiene
        Console.WriteLine($"Contains 'Second': {queue.Contains("Second")}"); // Salida: True

        // Convertir a matriz
        object[] array = queue.ToArray();
        Console.WriteLine($"Array Length: {array.Length}"); // Salida: 2
    }
}

Ejemplo 2

using System;
using System.Collections;

namespace CollectionsApplication
{
   class Program
   {
      static void Main(string[] args)
      {
         Queue q = new Queue();

         q.Enqueue('A');
         q.Enqueue('M');
         q.Enqueue('G');
         q.Enqueue('W');
         
         Console.WriteLine("Current queue: ");
         foreach (char c in q)
            Console.Write(c + " ");
         Console.WriteLine();
         q.Enqueue('V');
         q.Enqueue('H');
         Console.WriteLine("Current queue: ");        
         foreach (char c in q)
            Console.Write(c + " ");
         Console.WriteLine();
         Console.WriteLine("Removing some values ");
         char ch = (char)q.Dequeue();
         Console.WriteLine("The removed value: {0}", ch);
         ch = (char)q.Dequeue();
         Console.WriteLine("The removed value: {0}", ch);
         Console.ReadKey();
      }
   }
}

Cuando el código anterior se compila y ejecuta, produce el siguiente resultado:

Current queue: 
A M G W 
Current queue: 
A M G W V H 
Removing values
The removed value: A
The removed value: M

C# 集合Colecciones de C#

Otras extensiones