Java Sets bieten eine leistungsstarke und flexible Möglichkeit, eindeutige Elemente zu speichern und damit umzugehen, ohne sich um die Verwaltung von Duplikaten kümmern zu müssen. Die Wahl der geeigneten Set-Implementierung hängt von den spezifischen Anforderungen Ihrer Anwendung ab.
Set ist eine Schnittstelle (Interface) in der Java-Programmiersprache, die eine Sammlung von eindeutigen, nicht doppelten Elementen repräsentiert. Es gibt verschiedene Implementierungen von Sets in Java, darunter HashSet, LinkedHashSet und TreeSet. Die Verwendung von Java Sets bietet mehrere Vorteile:
Eindeutigkeit: Ein Set erlaubt keine Duplikate. Wenn Sie sicherstellen möchten, dass Ihre Daten keine doppelten Werte enthalten, ist ein Set eine effiziente Wahl.
Schnelle Suche: Sets sind für schnelle Suchvorgänge optimiert. Die Implementierung HashSet verwendet beispielsweise Hashing, um die Suche nach Elementen in konstanter Zeit (O(1)) zu ermöglichen.
Keine festgelegte Reihenfolge: Wenn die Reihenfolge der Elemente keine Rolle spielt, bieten Sets den Vorteil, dass sie die Reihenfolge der Elemente nicht festlegen. Dies kann in Szenarien nützlich sein, in denen die Reihenfolge keine Bedeutung hat und die Performance wichtiger ist.
Schnelle Einfügungen und Löschungen: Sets bieten effiziente Operationen zum Hinzufügen (add) und Entfernen von Elementen. Die Zeitkomplexität für Einfügungen und Löschungen hängt von der spezifischen Implementierung des Sets ab, ist jedoch oft sehr gering.
Schnittstellen: Da Set eine Schnittstelle ist, können Sie verschiedene Implementierungen je nach Ihren Anforderungen verwenden, ohne den Code zu ändern. Dies erleichtert die Anpassung an unterschiedliche Performance- oder Verhaltensanforderungen.
Performance in speziellen Fällen: Die Implementierung TreeSet stellt sicher, dass die Elemente in aufsteigender Reihenfolge sortiert sind. Dies kann in Fällen nützlich sein, in denen Sie Elemente in einer bestimmten Reihenfolge benötigen.
Anwendungen in Algorithmen: Sets werden in vielen Algorithmen und Datenverarbeitungsaufgaben verwendet, wie z.B. zur Suche nach Duplikaten, zur Prüfung von Mitgliedschaft oder zur Entfernung von Duplikaten aus einer Liste.
Hier mal ein kleines Beispiel:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
import java.util.HashSet; import java.util.Iterator; import java.util.Set; /** * Thomas Wenzlaff */ public class TestSet { private String name; public TestSet(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { StringBuilder builder = new StringBuilder(); builder.append("TestSet ["); if (name != null) { builder.append("name="); builder.append(name); } builder.append("]"); return builder.toString(); } public static void main(String[] args) { TestSet start = new TestSet("Erste Mindmap"); TestSet zweite = new TestSet("Zweite Mindmap"); TestSet nicht = new TestSet("nicht vorhandene Mindmap"); Set<TestSet> s = new HashSet<>(); // SortedSet<TestSet> sortiertesSet = new TreeSet<>(); boolean erg = s.add(start); if (erg) { System.out.println("erfolgreich Hinzugefügt" + start + " zum Set"); } erg = s.add(zweite); if (erg) { System.out.println("erfolgreich Hinzugefügt " + zweite + " zum Set"); } erg = s.add(zweite); if (!erg) { System.err.println("Im Set werden keine doppelten Objekt erlaubt."); } System.out.println("Set: " + s); System.out.println("Set Size: " + s.size()); System.out.println("Set contains: " + s.contains(zweite)); System.out.println("Set !contains: " + s.contains(nicht)); System.out.println("Set toArray 1. in Set ist Reihenfolge nicht def: " + s.toArray()[1]); for (Iterator<TestSet> iterator = s.iterator(); iterator.hasNext();) { TestSet testSet = iterator.next(); System.out.println("Inhalt: " + testSet.getName()); } System.out.println("---------------------------"); s.stream().forEach(i -> System.out.println(i.getName())); } } |
Ergebnis:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
erfolgreich HinzugefügtTestSet [name=Erste Mindmap] zum Set erfolgreich Hinzugefügt TestSet [name=Zweite Mindmap] zum Set Im Set werden keine doppelten Objekt erlaubt. Set: [TestSet [name=Zweite Mindmap], TestSet [name=Erste Mindmap]] Set Size: 2 Set contains: true Set !contains: false Set toArray 1. in Set ist Reihenfolge nicht def: TestSet [name=Erste Mindmap] Inhalt: Zweite Mindmap Inhalt: Erste Mindmap --------------------------- Zweite Mindmap Erste Mindmap |