Interfaccia Set in Java

Concetti Chiave
  • L'interfaccia Set estende Collection e definisce il comportamento di una collezione che non consente elementi duplicati.
  • Gli elementi in un Set non hanno un ordine specifico, a meno che non si utilizzi un SortedSet o un NavigableSet.
  • I metodi principali includono add(), remove(), contains(), size(), e i metodi factory of() e copyOf().
  • L'interfaccia SortedSet estende Set e definisce un insieme ordinato in base all'ordinamento naturale degli elementi o a un comparatore fornito.
  • L'interfaccia NavigableSet estende SortedSet e fornisce metodi per il recupero di elementi basati sulla corrispondenza più vicina a un valore dato.

L'interfaccia Set

L'interfaccia Set definisce un insieme, inteso in senso matematico. Quindi, non può contenere elementi duplicati.

Estende Collection e specifica il comportamento di una collezione che non consente elementi duplicati. Pertanto, il metodo add() restituisce false se viene fatto un tentativo di aggiungere elementi duplicati a un insieme.

Con due eccezioni, non specifica alcun metodo aggiuntivo proprio. Set è un'interfaccia generica che ha questa dichiarazione:

interface Set<E> extends Collection<E>

Qui, E specifica il tipo di oggetti che l'insieme conterrà.

A partire da JDK 9, Set include il metodo factory of(), che ha un numero di overload. Ogni versione restituisce una collezione non modificabile, basata su valori che è composta dagli argomenti che le vengono passati. Lo scopo principale di of() è fornire un modo conveniente ed efficiente per creare una piccola collezione Set. Ci sono 12 overload di of(). Uno non prende argomenti e crea un insieme vuoto. È mostrato qui:

static <E> Set<E> of()

Dieci overload prendono da 1 a 10 argomenti e creano una lista che contiene gli elementi specificati. Sono mostrati qui:

static <E> Set<E> of(E ogg1)
static <E> Set<E> of(E ogg1, E ogg2)
static <E> Set<E> of(E ogg, E ogg2, E ogg3)
...
static <E> Set<E> of(E ogg1, E ogg2, E ogg3, E ogg4, E ogg5,
                     E ogg6, E ogg7, E ogg8, E ogg9, E ogg10)

L'overload finale di of() specifica un parametro varargs che prende un numero arbitrario di elementi o un array di elementi. È mostrato qui:

static <E> Set<E> of(E ... oggs)

Per tutte le versioni, gli elementi null non sono consentiti. In tutti i casi, l'implementazione Set non è specificata.

A partire da JDK 10, Set include il metodo statico copyOf() mostrato qui:

static <E> Set<E> copyOf(Collection <? extends E> sorgente)

Restituisce un insieme che contiene gli stessi elementi di sorgente. I valori null non sono consentiti. L'insieme restituito è non modificabile e basato su valori.

L'Interfaccia SortedSet

L'interfaccia SortedSet estende Set e dichiara il comportamento di un insieme ordinato in ordine crescente. Infatti, normalmente un insieme o Set non ha un ordine degli elementi e se li scorriamo con un iteratore, l'ordine degli elementi non è garantito. Tuttavia, un SortedSet mantiene gli elementi in ordine crescente. Quindi, quando si scorre un SortedSet, gli elementi vengono restituiti in ordine crescente.

SortedSet è un'interfaccia generica che ha questa dichiarazione:

interface SortedSet<E> extends Set<E>

Qui, E specifica il tipo di oggetti che l'insieme conterrà.

Oltre ai metodi forniti da Set, l'interfaccia SortedSet dichiara i metodi riassunti nella Tabella seguente:

Metodo Descrizione
Comparator<? super E> comparator() Restituisce il comparatore dell'insieme ordinato invocante. Se l'ordinamento naturale è usato per questo insieme, viene restituito null.
E first() Restituisce il primo elemento nell'insieme ordinato invocante.
SortedSet<E> headSet(E end) Restituisce un SortedSet contenente quegli elementi minori di end che sono contenuti nell'insieme ordinato invocante. Gli elementi nell'insieme ordinato restituito sono anche referenziati dall'insieme ordinato invocante.
E last() Restituisce l'ultimo elemento nell'insieme ordinato invocante.
SortedSet<E> subSet(E start, E end) Restituisce un SortedSet che include quegli elementi tra start e end–1. Gli elementi nella collezione restituita sono anche referenziati dall'oggetto invocante.
SortedSet<E> tailSet(E start) Restituisce un SortedSet che contiene quegli elementi maggiori o uguali a start che sono contenuti nell'insieme ordinato. Gli elementi nell'insieme restituito sono anche referenziati dall'oggetto invocante.
Tabella 1: Metodi dichiarati da SortedSet

Diversi metodi lanciano una NoSuchElementException quando nessun elemento è contenuto nell'insieme invocante. Una ClassCastException viene lanciata quando un oggetto è incompatibile con gli elementi in un insieme. Una NullPointerException viene lanciata se si tenta di usare un oggetto null e null non è permesso nell'insieme. Una IllegalArgumentException viene lanciata se viene usato un argomento non valido.

SortedSet definisce diversi metodi che rendono l'elaborazione dell'insieme più conveniente. Per ottenere il primo oggetto nell'insieme, chiamare first(). Per ottenere l'ultimo elemento, usare last(). È possibile ottenere un sottoinsieme di un insieme ordinato chiamando subSet(), specificando il primo e l'ultimo oggetto nell'insieme. Se serve il sottoinsieme che inizia con il primo elemento nell'insieme, usare headSet(). Se si vuole il sottoinsieme che termina l'insieme, usare tailSet().

L'interfaccia NavigableSet

L'interfaccia NavigableSet estende SortedSet e dichiara il comportamento di una collezione che supporta il recupero di elementi basato sulla corrispondenza più vicina a un valore o valori dati.

NavigableSet è un'interfaccia generica che ha questa dichiarazione:

interface NavigableSet<E> extends SortedSet<E>

Qui, E specifica il tipo di oggetti che il set conterrà. Oltre ai metodi che eredita da SortedSet, NavigableSet aggiunge quelli riassunti nella Tabella che segue:

Metodo Descrizione
E ceiling(E oggetto) Cerca nel set l'elemento più piccolo e tale che e >= oggetto. Se tale elemento viene trovato, viene restituito. Altrimenti, viene restituito null.
Iterator <E> descendingIterator() Restituisce un iteratore che si muove dal più grande al più piccolo. In altre parole, restituisce un iteratore inverso.
NavigableSet <E> descendingSet() Restituisce un NavigableSet che è l'inverso del set che invoca. Il set risultante è supportato dal set che invoca.
E floor(E oggetto) Cerca nel set l'elemento più grande e tale che e <= oggetto. Se tale elemento viene trovato, viene restituito. Altrimenti, viene restituito null.
NavigableSet <E> headSet(E limiteSuperore, boolean incl) Restituisce un NavigableSet che include tutti gli elementi del set che invoca che sono minori di limiteSuperore. Se incl è true, allora un elemento uguale a limiteSuperore è incluso. Il set risultante è supportato dal set che invoca.
E higher(E oggetto) Cerca nel set l'elemento più piccolo e tale che e > oggetto. Se tale elemento viene trovato, viene restituito. Altrimenti, viene restituito null.
E lower(E oggetto) Cerca nel set l'elemento più grande e tale che e < oggetto. Se tale elemento viene trovato, viene restituito. Altrimenti, viene restituito null.
E pollFirst() Restituisce il primo elemento, rimuovendo l'elemento nel processo. Poiché il set è ordinato, questo è l'elemento con il valore più piccolo. Viene restituito null se il set è vuoto.
E pollLast() Restituisce l'ultimo elemento, rimuovendo l'elemento nel processo. Poiché il set è ordinato, questo è l'elemento con il valore più grande. Viene restituito null se il set è vuoto.
NavigableSet <E> subSet(E limiteInferiore, boolean inclBasso, E limiteSuperore, boolean inclAlto) Restituisce un NavigableSet che include tutti gli elementi del set che invoca che sono maggiori di limiteInferiore e minori di limiteSuperore. Se inclBasso è true, allora un elemento uguale a limiteInferiore è incluso. Se inclAlto è true, allora un elemento uguale a limiteSuperore è incluso. Il set risultante è supportato dal set che invoca.
NavigableSet <E> tailSet(E limiteInferiore, boolean incl) Restituisce un NavigableSet che include tutti gli elementi del set che invoca che sono maggiori di limiteInferiore. Se incl è true, allora un elemento uguale a limiteInferiore è incluso. Il set risultante è supportato dal set che invoca.
Tabella 2: Metodi dichiarati da NavigableSet

Una ClassCastException viene lanciata quando un oggetto è incompatibile con gli elementi nel set. Una NullPointerException viene lanciata se viene fatto un tentativo di usare un oggetto null e null non è consentito nel set. Una IllegalArgumentException viene lanciata se viene usato un argomento non valido.