Java Set – Set in Java

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:

  1. int size(): per ottenere il numero di elementi nel Set.
  2. boolean isEmpty(): per verificare se il Set è vuoto o meno.
  3. boolean contains(Object o): Restituisce true se questo Set contiene l’elemento specificato.
  4. Iterator iterator(): Restituisce un iteratore sugli elementi di questo set. Gli elementi vengono restituiti in nessun ordine particolare.
  5. 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.
  6. boolean add(E e): Aggiunge l’elemento specificato a questo set se non è già presente (operazione opzionale).
  7. boolean remove(Object o): Rimuove l’elemento specificato da questo set se presente (operazione opzionale).
  8. boolean removeAll(Collection c): Rimuove da questo set tutti gli elementi contenuti nella collezione specificata (operazione opzionale).
  9. boolean retainAll(Collection c): Conserva solo gli elementi di questo set che sono contenuti nella collezione specificata (operazione opzionale).
  10. void clear(): Rimuove tutti gli elementi dal set.
  11. 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