Un Set è una collezione non ordinata che, a differenza di List, ha la garanzia di non contenere valori duplicati.
Il parametro di tipo generico dell'interfaccia Set indica il tipo degli elementi contenuti nel Set:
Set<Integer> ints = Set.of(1, 2, 3);
Set<String> strings = Set.of("alpha", "beta", "gamma");
Set<Object> mixed = Set.of(1, false, "foo");
Nota che il metodo Set.of() crea un'istanza di Set non modificabile.
Se provi a chiamare metodi come add e remove su questa istanza, otterrai un'eccezione in fase di esecuzione.
Per creare un Set modificabile, devi istanziare una classe che implementa l'interfaccia Set.
La classe integrata più usata che implementa questa interfaccia è la classe HashSet.
Set<Integer> ints = new HashSet<>();
L'interfaccia Set estende le interfacce Collection e Iterable, e quindi condivide molti metodi con altri tipi di collezioni.
Una differenza notevole rispetto all'interfaccia Collection, però, è che metodi come add e remove restituiscono un boolean (invece di void) che indica se l'elemento era contenuto nel set nel momento in cui è stato chiamato il metodo:
Set<Integer> set = new HashSet<>();
set.add(1);
// => true
set.add(2);
// => true
set.add(1);
// => false
set.size();
// => 2
set.contains(1);
// => true
set.contains(3);
// => false
set.remove(3);
// => false
set.remove(2);
// => true
set.size();
// => 1
La tua nostalgia per le carte Blorkemon™️ non accenna a diminuire, hai persino ricominciato a collezionarle e stai convincendo i tuoi amici a unirsi a te.
In questo esercizio, userai l'interfaccia Set per gestire la tua collezione, dato che le carte duplicate non sono importanti quando il tuo obiettivo è ottenere tutte le carte esistenti.
Hai appena ritrovato la tua vecchia scorta di carte Blorkemon™️! La scorta contiene un mucchio di carte duplicate, quindi è il momento di iniziare una nuova collezione eliminando i duplicati.
Vuoi davvero che i tuoi amici entrino nella tua follia per Blorkemon™️, e il modo migliore è far partire la loro collezione regalando una carta a ciascuno.
Implementa il metodo newCollection, che trasforma una lista di carte in un Set che rappresenta la tua nuova collezione.
GottaSnatchEmAll.newCollection(List.of("Newthree", "Newthree", "Newthree"));
// => {"Newthree"}
Una volta che hai una collezione, questa prende vita propria e deve crescere.
Implementa il metodo addCard, che riceve una nuova carta e il tuo insieme attuale di carte collezionate.
Il metodo deve aggiungere la nuova carta alla collezione se non è già presente e deve restituire un boolean
che indica se la collezione è stata aggiornata.
Set<String> collection = GottaSnatchEmAll.newCollection("Newthree");
GottaSnatchEmAll.addCard("Scientuna",collection);
// => true
collection.contains("Scientuna");
// => true
Vuoi davvero che i tuoi amici entrino nella tua follia per Blorkemon™️, quindi è il momento di iniziare a scambiare!
Quando si scambia con gli amici, non tutti gli scambi valgono la pena, né sono sempre possibili. Dovresti scambiare solo se sia tu sia il tuo amico avete una carta che l'altro non ha.
Implementa il metodo canTrade, che riceve la tua collezione attuale e la collezione di uno dei tuoi amici.
Deve restituire un boolean che indica se uno scambio è possibile, seguendo le regole precedenti.
Set<String> myCollection = Set.of("Newthree");
Set<String> theirCollection = Set.of("Scientuna");
GottaSnatchEmAll.canTrade(myCollection, theirCollection);
// => true
Tu e i tuoi amici appassionati di Blorkemon™️ vi riunite e vi chiedete quali carte siano le più comuni.
Implementa il metodo commonCards, che riceve una lista di collezioni e restituisce una collezione delle carte che tutte
le collezioni hanno in comune.
GottaSnatchEmAll.commonCards(List.of(Set.of("Scientuna"), Set.of("Newthree","Scientuna")));
// => {"Scientuna"}
Tu e i tuoi amici possedete collettivamente tutte le carte Blorkemon™️?
Implementa il metodo allCards, che riceve una lista di collezioni e restituisce una collezione di tutte le carte diverse
presenti in tutte le collezioni messe insieme.
GottaSnatchEmAll.allCards(List.of(Set.of("Scientuna"), Set.of("Newthree","Scientuna")));
// => {"Newthree", "Scientuna"}
Iscriviti a Exercism per imparare e padroneggiare Java con 26 concetti158 esercizi e il mentoring di persone reali, tutto gratis.