Quali sono i tipi di collezioni in C#?
sobes.tech AI
Risposta dell'AI
C# offre una vasta gamma di tipi di collezioni per memorizzare e gestire dati, situate in diversi spazi dei nomi (principalmente System.Collections, System.Collections.Generic, System.Collections.Concurrent, System.Collections.Immutable). Possono essere classificate secondo diversi criteri principali:
-
Per tipo di dati memorizzati:
- Non tipizzati (Untyped): Memorizzano oggetti di tipo
object(System.Collections). Richiedono conversioni di tipo e possono essere meno efficienti. - Tipizzati (Generic): Memorizzano oggetti di un tipo specifico (
System.Collections.Generic). Offrono sicurezza di tipo e migliori prestazioni.
- Non tipizzati (Untyped): Memorizzano oggetti di tipo
-
Per struttura dei dati:
- Liste (Lists): Collezioni sequenziali, accesso agli elementi tramite indice.
ArrayList(non tipizzato)List<T>(tipizzato)LinkedList<T>(lista doppiamente collegata tipizzata)
- Array: Di dimensione fissa, accesso tramite indice.
Array(classe base)T[](sugar sintattico per array)
- Dizionari (Dictionaries): Collezioni di coppie chiave-valore, accesso tramite chiave.
Hashtable(non tipizzato)Dictionary<TKey, TValue>(tipizzato)SortedList(non tipizzato, ordinato per chiave)SortedList<TKey, TValue>(tipizzato, ordinato per chiave)SortedDictionary<TKey, TValue>(tipizzato, ordinato per chiave, utilizza albero rosso-nero)
- Set: Collezioni di elementi unici.
HashSet<T>(tipizzato, non ordinato)SortedSet<T>(tipizzato, ordinato)
- Code (Queues): Collezioni che funzionano secondo il principio di "il primo arrivato, il primo uscito" (FIFO).
Queue(non tipizzato)Queue<T>(tipizzato)
- Stack: Collezioni che funzionano secondo il principio di "l’ultimo arrivato, il primo uscito" (LIFO).
Stack(non tipizzato)Stack<T>(tipizzato)
- Liste (Lists): Collezioni sequenziali, accesso agli elementi tramite indice.
-
Per sicurezza in multithreading:
- Non sicure per thread: La maggior parte delle collezioni standard (
System.Collections,System.Collections.Generic). Richiedono sincronizzazione esterna per il lavoro multithread. - Sicure per thread (Concurrent): Progettate per funzionare in modo sicuro in ambienti multithread senza blocco esterno (
System.Collections.Concurrent).ConcurrentBag<T>ConcurrentDictionary<TKey, TValue>ConcurrentQueue<T>ConcurrentStack<T>
- Non sicure per thread: La maggior parte delle collezioni standard (
-
Per mutabilità:
- Modificabili (Mutable): La maggior parte delle collezioni permette di aggiungere, rimuovere e modificare elementi.
- Immutabili (Immutable): Garantisce l’immutabilità dopo la creazione (
System.Collections.Immutable). Ogni operazione di modifica restituisce una nuova collezione.ImmutableArray<T>ImmutableList<T>ImmutableDictionary<TKey, TValue>ImmutableHashSet<T>ImmutableSortedSet<T>ImmutableQueue<T>ImmutableStack<T>
La scelta di un tipo specifico di collezione dipende dai requisiti del compito: tipo di dati, necessità di accesso tramite indice o chiave, requisiti di unicità degli elementi, ordine di memorizzazione, prestazioni, sicurezza in multithreading e mutabilità. Attualmente, le collezioni tipizzate dello spazio dei nomi System.Collections.Generic sono le più utilizzate in C#.