Sobes.tech
Junior

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:

  1. 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.
  2. 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)
  3. 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>
  4. 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#.