Sobes.tech
Junior

Cos'è HashSet in C#?

sobes.tech AI

Risposta dell'AI

HashSet<T> è una collezione non ordinata di elementi unici. Si basa su una tabella hash e garantisce operazioni rapide di aggiunta, rimozione e verifica della presenza di elementi (in media in tempo costante, O(1)).

Caratteristiche principali di HashSet<T>:

  • Unicità: Non può contenere duplicati. Tentando di aggiungere un elemento esistente, l'operazione viene ignorata.
  • Non ordinato: Gli elementi non sono memorizzati in un ordine specifico. L'ordine di iterazione può differire dall'ordine di inserimento.
  • Prestazioni: Grazie all'uso dell'hash, le operazioni di ricerca, aggiunta e rimozione hanno in media complessità O(1). Nel peggiore dei casi (con cattiva funzione hash o collisioni), le prestazioni possono diminuire.
  • Operazioni multiple: Supporta varie operazioni come unione (UnionWith), intersezione (IntersectWith), differenza (ExceptWith), verifica di sottoinsieme o sovrainsieme (IsSubsetOf, IsSupersetOf).

Esempio di utilizzo:

// Creazione di HashSet
HashSet<string> fruits = new HashSet<string>();

// Aggiunta di elementi
fruits.Add("mela");
fruits.Add("banana");
fruits.Add("arancia");
fruits.Add("mela"); // Verrà ignorato, poiché "mela" è già presente

// Verifica presenza di un elemento
bool hasBanana = fruits.Contains("banana"); // true
bool hasGrape = fruits.Contains("uva");   // false

// Rimozione di un elemento
fruits.Remove("arancia");

// Iterare sugli elementi
foreach (string fruit in fruits)
{
    // Output: mela, banana (ordine può variare)
    Console.WriteLine(fruit);
}

// Dimensione della collezione
int count = fruits.Count; // 2

HashSet<T> implementa le interfacce ICollection<T>, IEnumerable<T> e ISet<T>, consentendo il suo utilizzo in vari scenari di collezioni e l'esecuzione di operazioni specifiche di insiemi.