Java Set è una collezione di elementi (o oggetti) che non contiene elementi duplicati. Java Set è un’interfaccia che estende l’interfaccia Collection. A differenza di List, Java Set NON è una collezione ordinata, i suoi elementi NON hanno un ordine particolare. Java Set NON fornisce un controllo sulla posizione in cui è possibile inserire un elemento. Non è possibile accedere agli elementi tramite il loro indice e nemmeno cercare gli elementi nella lista.
Java Set
In questa sezione, discuteremo alcuni punti importanti su Java Set:
- L’interfaccia Java Set è un membro del Framework delle Collezioni Java.
- A differenza di List, Set NON ti consente di aggiungere elementi duplicati.
- Set ti consente di aggiungere al massimo un solo elemento null.
- L’interfaccia Set ha un metodo predefinito in Java 8: spliterator.
- A differenza di List e degli array, Set NON supporta gli indici o le posizioni dei suoi elementi.
- Set supporta i Generics e dovremmo usarli quando possibile. Utilizzare i Generics con Set eviterà ClassCastException durante l’esecuzione.
- Possiamo utilizzare le implementazioni dell’interfaccia Set per mantenere elementi unici.
Diagramma della classe Java Set
Interfaccia Java Set estende l’interfaccia Collection. L’interfaccia Collection estende l’interfaccia Iterable. Alcune delle classi di implementazione Set comunemente utilizzate sono HashSet, LinkedHashSet, TreeSet, CopyOnWriteArraySet e ConcurrentSkipListSet. AbstractSet fornisce un’implementazione scheletrica dell’interfaccia Set per ridurre lo sforzo nell’implementare Set.
Metodi di Java Set
In questa sezione discuteremo alcuni dei utili metodi di Java Set:
- int size(): per ottenere il numero di elementi nel Set.
- boolean isEmpty(): per verificare se il Set è vuoto o meno.
- boolean contains(Object o): Restituisce true se questo Set contiene l’elemento specificato.
- Iterator iterator(): Restituisce un iteratore sugli elementi di questo set. Gli elementi vengono restituiti in nessun ordine particolare.
- Object[] toArray(): Restituisce un array contenente tutti gli elementi di questo set. Se questo set offre qualche garanzia su quale ordine i suoi elementi vengono restituiti dal suo iteratore, questo metodo deve restituire gli elementi nello stesso ordine.
- boolean add(E e): Aggiunge l’elemento specificato a questo set se non è già presente (operazione opzionale).
- boolean remove(Object o): Rimuove l’elemento specificato da questo set se presente (operazione opzionale).
- boolean removeAll(Collection c): Rimuove da questo set tutti gli elementi contenuti nella collezione specificata (operazione opzionale).
- boolean retainAll(Collection c): Conserva solo gli elementi di questo set che sono contenuti nella collezione specificata (operazione opzionale).
- void clear(): Rimuove tutti gli elementi dal set.
- Iterator iterator(): Restituisce un iteratore sugli elementi di questo set.
Array Java in Set
A differenza della lista, non è possibile convertire direttamente un set Java in un array poiché non è implementato utilizzando un array. Quindi non possiamo utilizzare la classe Arrays per ottenere la vista dell’array come set. Possiamo seguire un altro approccio. Possiamo convertire un array in una lista utilizzando il metodo Arrays.asList(), quindi usarlo per creare un set. Utilizzando questo approccio, possiamo convertire un array Java in un set in due modi. Discutiamoli uno per uno utilizzando un semplice esempio. Approccio-1 In questo approccio, prima dobbiamo creare una lista utilizzando l’array dato e usarla per creare un set come mostrato di seguito.
import java.util.*;
public class ArrayToSet {
public static void main(String[] args) {
String[] vowels = {"a","e","i","o","u"};
Set<String> vowelsSet = new HashSet>(Arrays.asList(vowels));
System.out.println(vowelsSet);
/**
* Unlike List, Set is NOt backed by array,
* so we can do structural modification without any issues.
*/
vowelsSet.remove("e");
System.out.println(vowelsSet);
vowelsSet.clear();
System.out.println(vowelsSet);
}
}
Approccio-2 In questo approccio, NON utilizziamo una lista intermedia per creare un Set da un Array. Prima creiamo un HashSet vuoto, quindi utilizziamo Collections.addAll() per copiare gli elementi dell’array nel Set dato come mostrato di seguito.
import java.util.*;
public class ArrayToSet2 {
public static void main(String[] args) {
String[] vowels = {"a","e","i","o","u"};
Set<String> vowelsSet = new HashSet<>();
Collections.addAll(vowelsSet, vowels);
System.out.println(vowelsSet);
/**
* Unlike List, Set is NOt backed by array,
* so we can do structural modification without any issues.
*/
vowelsSet.remove("e");
System.out.println(vowelsSet);
vowelsSet.clear();
System.out.println(vowelsSet);
}
}
Output:- Quando eseguiamo i due programmi sopra, otterremo lo stesso output come mostrato di seguito.
[a, e, u, i, o]
[a, u, i, o]
[]
Set di Java in Array
In questa sezione, scriveremo un programma per convertire un Set di stringhe in un Array di stringhe utilizzando il metodo Set.toArray() come mostrato di seguito.
import java.util.*;
public class SetToArray {
public static void main(String[] args) {
Set();
// aggiungi esempio
vowelsSet.add("a");
vowelsSet.add("e");
vowelsSet.add("i");
vowelsSet.add("o");
vowelsSet.add("u");
// converte il Set in Array
String strArray[] = vowelsSet.toArray(new String[vowelsSet.size()]);
System.out.println(Arrays.toString(strArray));
}
}
Output:- Quando eseguiamo il programma sopra, otterremo il seguente output come mostrato di seguito.
[a, e, u, i, o]
Ordinamento di un Set di Java
Come sappiamo, il Set (HashSet) NON supporta il sorting degli elementi direttamente. Memorizza e mostra gli elementi in ordine casuale. Tuttavia, abbiamo alcuni approcci per ordinare gli elementi come mostrato di seguito:
import java.util.*;
public class SetSortingExample {
public static void main(String[] args) {
Set<Integer> intsSet = new HashSet<>();
Random random = new Random();
for (int i = 0; i {return (o2-o1);});
System.out.println("Reverse Sorting: " + intsList2);
// Approach-3
Set<Integer> sortedSet = new TreeSet<>(intsSet);
System.out.println("Sorted Set: " + sortedSet);
}
}
Output:- Quando eseguiamo il programma sopra, vedremo il seguente output.
[560, 864, 176, 657, 135, 103, 40, 123, 555, 589]
Natural Sorting: [40, 103, 123, 135, 176, 555, 560, 589, 657, 864]
Before Sorting: [560, 864, 176, 657, 135, 103, 40, 123, 555, 589]
Reverse Sorting: [864, 657, 589, 560, 555, 176, 135, 123, 103, 40]
Sorted Set: [40, 103, 123, 135, 176, 555, 560, 589, 657, 864]
Operazioni comuni su Set Java
Le operazioni più comuni eseguite su un Set Java sono aggiungere, aggiungereTutto, svuotare, dimensione ecc. Di seguito è riportato un semplice esempio di Set Java che mostra l’uso dei metodi comuni.
import java.util.*;
public class SetCommonOperations
{
public static void main(String args[])
{
Set vowels= new HashSet<>();
//esempio di aggiunta
vowels.add("A");
vowels.add("E");
vowels.add("I");
//Non possiamo inserire elementi in base all'indice in un Set
System.out.println(vowels);
Set set = new HashSet<>();
set.add("O");
set.add("U");
//unione degli elementi del set alle lettere
vowels.addAll(set);
System.out.println(vowels);
//esempio di svuotamento per svuotare il set
set.clear();
//esempio di dimensione
System.out.println("letters set size = " + vowels.size());
vowels.clear();
vowels.add("E"); vowels.add("E");vowels.add("I"); vowels.add("O");
System.out.println("Given set contains E element or not? = " + vowels.contains("E"));
}
}
Output:-
[A, E, I]
[A, E, U, I, O]
letters set size = 5
Given set contains E element or not? = true
Iteratore di Set Java
Di seguito è riportato un esempio semplice che mostra come iterare su un Set Java.
import java.util.*;
public class SetIteratorExample
{
public static void main(String[] args)
{
Set set = new HashSet<>();
for(int i=0; i<5; i++)
set.add(i);
Iterator iterator = set.iterator();
//iterazione semplice
while(iterator.hasNext()){
int i = (int) iterator.next();
System.out.print(i + ", ");
}
System.out.println("\n" + set);
//modifica del set utilizzando l'iteratore
iterator = set.iterator();
while(iterator.hasNext()){
int x = (int) iterator.next();
if(x%2 ==0) iterator.remove();
}
System.out.println(set);
//cambiamento della struttura del set durante l'iterazione
iterator = set.iterator();
while(iterator.hasNext()){
//Eccezione ConcurrentModificationException qui
int x = (int) iterator.next();
if(x==1) set.add(10);
}
}
}
Set Java in Stream
Di seguito è riportato un esempio semplice che mostra come convertire un Set Java in Stream e eseguire alcune operazioni secondo le nostre esigenze.
import java.util.*;
public class SetToStream {
public static void main(String[] args) {
Set vowelsSet = new HashSet<>();
//esempio di aggiunta
vowelsSet.add("a");
vowelsSet.add("e");
vowelsSet.add("i");
vowelsSet.add("o");
vowelsSet.add("u");
//converti set in stream
vowelsSet.stream().forEach(System.out::println);
}
}
Output:-
a
e
u
i
o
Java SE 9 Set
Nel rilascio di Java SE 9, Oracle Corp sta per aggiungere alcuni utili metodi di utilità all’interfaccia Set. È meglio comprenderli con alcuni esempi semplici e utili. Si prega di consultare il mio tutorial su “Java SE 9: Metodi Factory di Set” per impararli. Questo è tutto un breve riepilogo su Set in Java. Spero che questi esempi di Set in Java ti aiuteranno ad iniziare con la programmazione della collezione Set. Grazie per aver letto i miei tutorial. Si prega di lasciarmi un commento se ti piacciono i miei tutorial o se hai problemi, suggerimenti o errori di battitura.
Source:
https://www.digitalocean.com/community/tutorials/java-set