Java Set – Set in Java

Java Set is een verzameling van elementen (of objecten) die geen duplicaten bevat. Java Set is een interface die de Collection interface uitbreidt. In tegenstelling tot List, is Java Set geen geordende verzameling, de elementen hebben geen specifieke volgorde. Java Set biedt GEEN controle over de positie waar je een element kunt toevoegen. Je kunt geen elementen benaderen op basis van hun index en ook geen elementen zoeken in de lijst.

Java Set

In dit gedeelte zullen we enkele belangrijke punten bespreken over Java Set:

  • Java Set-interface is lid van het Java Collections Framework.
  • In tegenstelling tot List, staat Set NIET toe dat je duplicaat elementen toevoegt.
  • Set staat toe dat je slechts één null-element toevoegt.
  • Set-interface heeft één standaard methode in Java 8: spliterator.
  • In tegenstelling tot List en arrays, ondersteunt Set geen indexen of posities van de elementen.
  • Set ondersteunt generics en we zouden het altijd moeten gebruiken wanneer mogelijk. Het gebruik van generics met Set voorkomt ClassCastException tijdens runtime.
  • We kunnen implementaties van Set-interface gebruiken om unieke elementen te behouden.

Java Set Klasse Diagram

De Java Set-interface breidt de Collection-interface uit. De Collection-interface breidt de Iterable-interface uit. Enkele vaak gebruikte implementatieklassen van Set zijn HashSet, LinkedHashSet, TreeSet, CopyOnWriteArraySet en ConcurrentSkipListSet. AbstractSet biedt een skeletimplementatie van de Set-interface om de inspanning bij het implementeren van Set te verminderen.

Java Set Methoden

In dit gedeelte zullen we enkele nuttige Java Set-methoden bespreken:

  1. int size(): om het aantal elementen in de Set te verkrijgen.
  2. boolean isEmpty(): om te controleren of de Set leeg is of niet.
  3. boolean contains(Object o): Geeft true terug als deze Set het gespecificeerde element bevat.
  4. Iterator iterator(): Geeft een iterator terug over de elementen in deze set. De elementen worden in willekeurige volgorde geretourneerd.
  5. Object[] toArray(): Geeft een array terug met alle elementen in deze set. Als deze set garanties geeft over de volgorde waarin de elementen worden geretourneerd door de iterator, moet deze methode de elementen in dezelfde volgorde retourneren.
  6. boolean add(E e): Voegt het opgegeven element toe aan deze set als het nog niet aanwezig is (optionele bewerking).
  7. boolean remove(Object o): Verwijdert het opgegeven element uit deze set als het aanwezig is (optionele bewerking).
  8. boolean removeAll(Collection c): Verwijdert uit deze set alle elementen die aanwezig zijn in de opgegeven collectie (optionele bewerking).
  9. boolean retainAll(Collection c): Behoudt alleen de elementen in deze set die aanwezig zijn in de opgegeven collectie (optionele bewerking).
  10. void clear(): Verwijdert alle elementen uit de set.
  11. Iterator iterator(): Geeft een iterator terug over de elementen in deze set.

Java Array naar Set

In tegenstelling tot een lijst, kunnen we een Java Set niet direct converteren naar een array omdat het NIET geïmplementeerd is met behulp van een array. Dus we kunnen de Arrays-klasse niet gebruiken om de weergave van een array als set te krijgen. We kunnen een andere benadering volgen. We kunnen een array converteren naar een lijst met behulp van de Arrays.asList() methode en deze vervolgens gebruiken om een Set te maken. Door deze aanpak te volgen, kunnen we een Java-array op twee manieren converteren naar een Set. Laten we ze een voor een bespreken aan de hand van een eenvoudig voorbeeld. Aanpak-1 In deze aanpak moeten we eerst een lijst maken met de gegeven array en deze gebruiken om een Set te maken zoals hieronder wordt getoond.

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);
   }
}

Benadering-2 In deze benadering gebruiken we GEEN tussentijdse lijst om een Set te maken van een Array. Maak eerst een lege HashSet en gebruik vervolgens Collections.addAll() om array-elementen naar de gegeven Set te kopiëren zoals hieronder getoond.

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);
   }
}

Uitvoer:- Wanneer we de bovenstaande twee programma’s uitvoeren, krijgen we dezelfde uitvoer te zien zoals hieronder getoond.

[a, e, u, i, o]
[a, u, i, o]
[]

Java Set naar Array

In dit gedeelte schrijven we een programma om een Set van Strings om te zetten in een Array van Strings met behulp van de Set.toArray() methode zoals hieronder getoond.

import java.util.*;

public class SetToArray {
   public static void main(String[] args) {
	Set();

	// voorbeeld toevoegen
	vowelsSet.add("a");
	vowelsSet.add("e");
	vowelsSet.add("i");
	vowelsSet.add("o");
	vowelsSet.add("u");
		
	// zet Set om naar Array
	String strArray[] = vowelsSet.toArray(new String[vowelsSet.size()]);
	System.out.println(Arrays.toString(strArray)); 
   }
}

Uitvoer:- Wanneer we het bovenstaande programma uitvoeren, krijgen we de volgende uitvoer te zien zoals hieronder getoond.

[a, e, u, i, o]

Java Set Sorteren

Zoals we weten, ondersteunt Set (HashSet) geen directe sortering van elementen. Het slaat elementen op en toont ze in willekeurige volgorde. We hebben echter enkele benaderingen om de elementen te sorteren zoals hieronder getoond:

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);
	}
}

Uitvoer:- Wanneer we het bovenstaande programma uitvoeren, zien we de volgende uitvoer.

[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]

Java Set Gemeenschappelijke Bewerkingen

Meest voorkomende bewerkingen uitgevoerd op Java Set zijn toevoegen, allesToevoegen, wissen, grootte, enzovoort. Hieronder staat een eenvoudig voorbeeld van een Java Set waarin veelgebruikte methoden worden getoond.

import java.util.*;

public class SetCommonOperations 
{
   public static void main(String args[]) 
   {
	Set vowels= new HashSet<>();
		
	//voorbeeld toevoegen
	vowels.add("A");
	vowels.add("E");
	vowels.add("I");

	//We kunnen geen elementen invoegen op basis van index naar een Set
	System.out.println(vowels);
		
	Set set = new HashSet<>();
	set.add("O");
	set.add("U");
	
	//set elementen toevoegen aan letters
	vowels.addAll(set);
	System.out.println(vowels);
	
	//voorbeeld wissen om de set leeg te maken
	set.clear();
		
	//voorbeeld grootte
	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

Java Set Iterator

Hieronder staat een eenvoudig voorbeeld dat laat zien hoe je kunt itereren over een Java Set.

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();
	
	//eenvoudige iteratie
	while(iterator.hasNext()){
		int i = (int) iterator.next();
		System.out.print(i + ", ");
	}
	System.out.println("\n" + set);
	
	//wijziging van set met behulp van iterator
	iterator = set.iterator();
	while(iterator.hasNext()){
		int x = (int) iterator.next();
		if(x%2 ==0) iterator.remove();
	}
	System.out.println(set);
		
	//setstructuur wijzigen tijdens iteratie
	iterator = set.iterator();
	while(iterator.hasNext()){
                //ConcurrentModificationException hier
		int x = (int) iterator.next(); 
		if(x==1) set.add(10);
	}
   }
}

Java Set naar Stream

Hieronder staat een eenvoudig voorbeeld dat laat zien hoe je een Java Set kunt converteren naar een Stream en enkele bewerkingen kunt uitvoeren volgens onze vereisten.

import java.util.*;

public class SetToStream {

   public static void main(String[] args) {
	Set vowelsSet = new HashSet<>();
	//voorbeeld toevoegen
	vowelsSet.add("a");
	vowelsSet.add("e");
	vowelsSet.add("i");
	vowelsSet.add("o");
	vowelsSet.add("u");
		
	//set converteren naar stream
	vowelsSet.stream().forEach(System.out::println);
   }
}

Uitvoer:-

a
e
u
i
o

Java SE 9 Set

In de Java SE 9-release gaat Oracle Corp enkele nuttige hulpprogramma-methoden toevoegen aan de Set-interface. Het is beter om ze te begrijpen met een paar eenvoudige en nuttige voorbeelden. Neem alstublieft mijn tutorial door op “Java SE 9: Set Factory Methods” om ze te leren. Dat is alles voor een snelle samenvatting over Set in Java. Ik hoop dat deze Java Set-voorbeelden je helpen bij het beginnen met het programmeren van Set-collecties. Bedankt voor het lezen van mijn tutorials. Laat alstublieft een reactie achter als u mijn tutorials leuk vindt of als u problemen, suggesties of typfouten heeft.

Source:
https://www.digitalocean.com/community/tutorials/java-set