Java Set – Set in Java

Java Set ist eine Sammlung von Elementen (oder Objekten), die keine doppelten Elemente enthält. Java Set ist eine Schnittstelle, die die Collection-Schnittstelle erweitert. Im Gegensatz zu List ist Java Set keine geordnete Sammlung, und seine Elemente haben keine bestimmte Reihenfolge. Java Set bietet keine Kontrolle über die Position, an der Sie ein Element einfügen können. Sie können nicht auf Elemente über ihren Index zugreifen und auch nicht in der Liste nach Elementen suchen.

Java Set

In diesem Abschnitt werden einige wichtige Punkte zu Java Set diskutiert:

  • Die Java Set-Schnittstelle ist ein Mitglied des Java Collections Frameworks.
  • Im Gegensatz zu List erlaubt Set KEINE Duplikate hinzuzufügen.
  • Set erlaubt das Hinzufügen von höchstens einem Null-Element.
  • Die Set-Schnittstelle hat in Java 8 eine Standardmethode: spliterator.
  • Im Gegensatz zu List und Arrays unterstützt Set keine Indizes oder Positionen seiner Elemente.
  • Set unterstützt Generics, und wir sollten es immer verwenden. Die Verwendung von Generics mit Set vermeidet ClassCastException zur Laufzeit.
  • Wir können Implementierungen der Set-Schnittstelle verwenden, um eindeutige Elemente beizubehalten.

Java Set Klassendiagramm

Die Java Set-Schnittstelle erweitert die Collection-Schnittstelle. Die Collection-Schnittstelle erweitert die Iterable-Schnittstelle. Einige der häufig verwendeten Implementierungsklassen für Sets sind HashSet, LinkedHashSet, TreeSet, CopyOnWriteArraySet und ConcurrentSkipListSet. AbstractSet bietet eine skelettartige Implementierung der Set-Schnittstelle, um den Aufwand bei der Implementierung von Set zu reduzieren.

Java Set Methoden

In diesem Abschnitt werden einige nützliche Java-Set-Methoden diskutiert:

  1. int size(): um die Anzahl der Elemente im Set zu erhalten.
  2. boolean isEmpty(): um zu überprüfen, ob das Set leer ist oder nicht.
  3. boolean contains(Object o): Gibt true zurück, wenn dieses Set das angegebene Element enthält.
  4. Iterator iterator(): Gibt einen Iterator über die Elemente in diesem Set zurück. Die Elemente werden in keiner bestimmten Reihenfolge zurückgegeben.
  5. Object[] toArray(): Gibt ein Array zurück, das alle Elemente in diesem Set enthält. Wenn dieses Set irgendwelche Garantien darüber macht, in welcher Reihenfolge seine Elemente von seinem Iterator zurückgegeben werden, muss diese Methode die Elemente in derselben Reihenfolge zurückgeben.
  6. boolean add(E e): Fügt das angegebene Element diesem Satz hinzu, wenn es noch nicht vorhanden ist (optionale Operation).
  7. boolean remove(Object o): Entfernt das angegebene Element aus diesem Satz, wenn es vorhanden ist (optionale Operation).
  8. boolean removeAll(Collection c): Entfernt aus diesem Satz alle Elemente, die in der angegebenen Sammlung enthalten sind (optionale Operation).
  9. boolean retainAll(Collection c): Behält nur die Elemente in diesem Satz bei, die in der angegebenen Sammlung enthalten sind (optionale Operation).
  10. void clear(): Entfernt alle Elemente aus dem Satz.
  11. Iterator iterator(): Gibt einen Iterator über die Elemente in diesem Satz zurück.

Java-Array in Set umwandeln

Im Gegensatz zu einer Liste können wir ein Java-Set nicht direkt in ein Array umwandeln, da es NICHT mit einem Array implementiert ist. Daher können wir die Arrays-Klasse nicht verwenden, um die Ansicht des Arrays als Set zu erhalten. Wir können einen anderen Ansatz verfolgen. Wir können ein Array mithilfe der Arrays.asList()-Methode in eine Liste umwandeln und es dann verwenden, um ein Set zu erstellen. Mit diesem Ansatz können wir ein Java-Array auf zwei Arten in ein Set umwandeln. Lassen Sie uns sie nacheinander anhand eines einfachen Beispiels besprechen. Ansatz-1 In diesem Ansatz müssen wir zunächst eine Liste mit dem gegebenen Array erstellen und sie dann verwenden, um ein Set zu erstellen, wie unten gezeigt.

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

Ansatz-2 In diesem Ansatz verwenden wir KEINE Zwischenliste, um aus einem Array ein Set zu erstellen. Erstellen Sie zuerst ein leeres HashSet, und verwenden Sie dann Collections.addAll(), um die Array-Elemente in das angegebene Set zu kopieren, wie unten gezeigt.

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

Ausgabe:- Wenn wir die obigen beiden Programme ausführen, erhalten wir die gleiche Ausgabe wie unten gezeigt.

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

Java-Set in Array

In diesem Abschnitt werden wir ein Programm schreiben, um ein Set von Strings in ein Array von Strings mit der Methode Set.toArray() wie unten gezeigt umzuwandeln.

import java.util.*;

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

	// Beispiel hinzufügen
	vowelsSet.add("a");
	vowelsSet.add("e");
	vowelsSet.add("i");
	vowelsSet.add("o");
	vowelsSet.add("u");
		
	// Set in Array umwandeln
	String strArray[] = vowelsSet.toArray(new String[vowelsSet.size()]);
	System.out.println(Arrays.toString(strArray)); 
   }
}

Ausgabe:- Wenn wir das obige Programm ausführen, erhalten wir die folgende Ausgabe wie unten gezeigt.

[a, e, u, i, o]

Java-Set Sortierung

Wie wir wissen, unterstützt Set (HashSet) die direkte Sortierung der Elemente NICHT. Es speichert und zeigt seine Elemente jedoch in zufälliger Reihenfolge an. Es gibt jedoch einige Ansätze, um seine Elemente zu sortieren, wie unten gezeigt:

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

Ausgabe:- Wenn wir das obige Programm ausführen, sehen wir die folgende Ausgabe.

[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 Gemeinsame Operationen

Die häufigsten Operationen, die auf Java-Sets durchgeführt werden, sind Hinzufügen, addAll, löschen, Größe usw. Im Folgenden finden Sie ein einfaches Java-Set-Beispiel, das die übliche Methodennutzung zeigt.

import java.util.*;

public class SetCommonOperations 
{
   public static void main(String args[]) 
   {
	Set vowels= new HashSet<>();
		
	// Beispiel für Hinzufügen
	vowels.add("A");
	vowels.add("E");
	vowels.add("I");

	// Wir können keine Elemente basierend auf einem Index zu einem Set hinzufügen
	System.out.println(vowels);
		
	Set set = new HashSet<>();
	set.add("O");
	set.add("U");
	
	// Anhängen von Set-Elementen an Buchstaben
	vowels.addAll(set);
	System.out.println(vowels);
	
	// Beispiel für das Leeren des Sets, um es leer zu machen
	set.clear();
		
	// Beispiel für die Größe
	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"));
		
   }
}

Ausgabe:-

[A, E, I]
[A, E, U, I, O]
letters set size = 5
Given set contains E element or not? = true

Java Set Iterator

Im Folgenden finden Sie ein einfaches Beispiel, wie man über ein Java-Set iteriert.

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();
	
	// Einfache Iteration
	while(iterator.hasNext()){
		int i = (int) iterator.next();
		System.out.print(i + ", ");
	}
	System.out.println("\n" + set);
	
	// Änderung des Sets mit dem Iterator
	iterator = set.iterator();
	while(iterator.hasNext()){
		int x = (int) iterator.next();
		if(x%2 ==0) iterator.remove();
	}
	System.out.println(set);
		
	// Ändern der Set-Struktur während der Iteration
	iterator = set.iterator();
	while(iterator.hasNext()){
                // Hier tritt ConcurrentModificationException auf
		int x = (int) iterator.next(); 
		if(x==1) set.add(10);
	}
   }
}

Java Set in Stream

Im Folgenden finden Sie ein einfaches Beispiel, wie man ein Java-Set in einen Stream umwandelt und einige Operationen gemäß unseren Anforderungen durchführt.

import java.util.*;

public class SetToStream {

   public static void main(String[] args) {
	Set vowelsSet = new HashSet<>();
	// Beispiel für das Hinzufügen
	vowelsSet.add("a");
	vowelsSet.add("e");
	vowelsSet.add("i");
	vowelsSet.add("o");
	vowelsSet.add("u");
		
	// Set in Stream umwandeln
	vowelsSet.stream().forEach(System.out::println);
   }
}

Ausgabe:-

a
e
u
i
o

Java SE 9 Set

In der Java SE 9-Version wird die Oracle Corp einige nützliche Hilfsmethoden zur Set-Schnittstelle hinzufügen. Es ist besser, sie mit einigen einfachen und nützlichen Beispielen zu verstehen. Bitte lesen Sie meinen Tutorial unter „Java SE 9: Set Factory Methods“, um sie zu lernen. Das ist alles zu einem schnellen Überblick über Set in Java. Ich hoffe, diese Java-Set-Beispiele helfen Ihnen, mit der Set-Collection-Programmierung zu beginnen. Vielen Dank für das Lesen meiner Tutorials. Bitte hinterlassen Sie einen Kommentar, wenn Ihnen meine Tutorials gefallen oder wenn Sie Probleme, Vorschläge oder irgendwelche Schreibfehler haben.

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