Esporta (0) Stampa
Espandi tutto

Queue (classe generica)

Nota: questa classe è stata introdotta con .NET Framework versione 2.0.

Rappresenta un insieme di oggetti FIFO (First-In First-Out).

Spazio dei nomi: System.Collections.Generic
Assembly: System (in system.dll)

[SerializableAttribute] 
[ComVisibleAttribute(false)] 
public class Queue<T> : IEnumerable<T>, ICollection, 
	IEnumerable
J# supporta l'utilizzo di tipi e metodi generici ma non la dichiarazione di nuovi.
JScript non supporta tipi e metodi generici.

Parametri di tipo

T

Specifica il tipo di elementi della coda.

Le code sono utili per archiviare i messaggi in ordine di ricezione, in modo da poterli elaborare in modo sequenziale. Gli oggetti memorizzati in una Queue vengono inseriti a un'estremità e rimossi dall'altra.

La capacità di una classe Queue è il numero di elementi che tale classe Queue può contenere. In questa implementazione, la capacità iniziale predefinita di un oggetto Queue è 8; tuttavia, è possibile che questo valore predefinito cambi nelle versioni future di .NET Framework SDK. Ogni volta che si aggiungono elementi a una classe Queue, la capacità viene automaticamente aumentata nel modo appropriato riallocando la matrice interna. La capacità può essere ridotta mediante la chiamata a TrimExcess.

Queue accetta riferimento null (Nothing in Visual Basic) come valore valido per i tipi di riferimento e consente elementi duplicati.

Nell'esempio di codice riportato di seguito vengono illustrati diversi metodi della classe generica Queue. Viene creata una coda di stringhe con la capacità predefinita e viene utilizzato il metodo Enqueue per inserire cinque stringhe nella coda. Gli elementi della coda vengono enumerati, senza alcun effetto sullo stato della coda. Viene utilizzato il metodo Dequeue per rimuovere dalla coda la prima stringa. Viene utilizzato il metodo Peek per esaminare il successivo elemento della coda, quindi viene utilizzato il metodo Dequeue per rimuoverlo dalla coda.

Viene utilizzato il metodo ToArray per creare una matrice e copiarvi gli elementi della coda, quindi la matrice viene passata al costruttore Queue che accetta IEnumerable, creando una copia della coda. Vengono visualizzati gli elementi della copia.

Viene creata una matrice di dimensioni doppie rispetto alla coda, quindi viene utilizzato il metodo CopyTo per copiare gli elementi della matrice a partire dal centro della matrice. Viene di nuovo utilizzato il costruttore Queue per creare una seconda copia della coda contenente tre elementi null all'inizio.

Viene utilizzato il metodo Contains per mostrare che la stringa "four" è nella prima copia della coda, quindi il metodo Clear cancella il contenuto della copia e infine la proprietà Count mostra che la coda è vuota.

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
 */

System.Object
  System.Collections.Generic.Queue

I membri statici pubblici (Shared in Visual Basic) di questo tipo sono thread-safe. Qualsiasi membro di istanza non ha garanzia di essere thread-safe.

Un oggetto Queue può supportare più lettori simultaneamente, purché l'insieme non venga modificato. Tuttavia, l'enumerazione di un insieme non è di per sé una procedura thread-safe. Per garantire che l'enumerazione sia thread-safe, è possibile bloccare l'insieme durante l'intera enumerazione. Per consentire l'accesso all'insieme in lettura e scrittura da parte di più thread, è necessario implementare una sincronizzazione personalizzata.

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile per Pocket PC, Windows Mobile per Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework non supporta tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema.

.NET Framework

Supportato in: 2.0

.NET Compact Framework

Supportato in: 2.0

Aggiunte alla community

AGGIUNGI
Mostra:
© 2014 Microsoft