Initialisierung von HashSet zum Zeitpunkt der Erstellung

1. Übersicht

In diesem kurzen Tutorial werden verschiedene Methoden zum Initialisieren des HashSet mit Werten zum Zeitpunkt seiner Erstellung vorgestellt .

Wenn Sie stattdessen die Funktionen von HashSet erkunden möchten , lesen Sie diesen Kernartikel hier.

Wir werden uns mit den in Java integrierten Methoden seit Java 5 und zuvor befassen, gefolgt von einem neuen Mechanismus, der seit Java 8 eingeführt wurde . Wir werden auch eine benutzerdefinierte Dienstprogrammmethode sehen und schließlich die Funktionen untersuchen, die von Sammlungsbibliotheken von Drittanbietern bereitgestellt werden , insbesondere von Google Guava.

Wenn Sie das Glück haben, bereits auf JDK9 + migriert zu sein, können Sie einfach die Methoden der Collection Factory verwenden.

2. Integrierte Java-Methoden

Beginnen wir mit der Untersuchung von drei integrierten Mechanismen, die seit Java 5 oder früher verfügbar sind .

2.1. Verwenden einer anderen Erfassungsinstanz

Wir können eine vorhandene Instanz einer anderen Sammlung übergeben , um das Set zu initialisieren . Im folgenden Beispiel verwenden wir eine inline erstellte Liste :

Set set = new HashSet(Arrays.asList("a", "b", "c"));

2.2. Anonyme Klasse verwenden

In einem weiteren Ansatz können wir die anonyme Klasse verwenden, um HashSet ein Element hinzuzufügen .

Beachten Sie die Verwendung von doppelten geschweiften Klammern. Dieser Ansatz ist technisch sehr teuer, da bei jedem Aufruf eine anonyme Klasse erstellt wird.

Je nachdem, wie oft wir Set initialisieren müssen, können wir versuchen, diesen Ansatz zu vermeiden:

Set set = new HashSet(){{ add("a"); add("b"); add("c"); }};

2.3. Verwenden der Collections Utility-Methode seit Java 5

Die Java- Dienstprogrammklasse " Collections" bietet die Methode " Singleton" zum Erstellen eines Sets mit einem einzelnen Element . Die mit der Singleton- Methode erstellte Set- Instanz ist unveränderlich, was bedeutet, dass wir keine weiteren Werte hinzufügen können.

Es gibt Situationen, insbesondere beim Testen von Einheiten, in denen wir ein Set mit einem einzelnen Wert erstellen müssen :

Set set = Collections.singleton("a");

3. Definieren der benutzerdefinierten Dienstprogrammmethode

Wir können eine statische endgültige Methode wie folgt definieren. Die Methode akzeptiert variable Argumente .

Die Verwendung von Collections.addAll, die das Auflistungsobjekt und ein Array von Werten akzeptiert, ist unter anderem aufgrund des geringen Overheads beim Kopieren von Werten am besten .

Die Methode verwendet Generika, sodass wir Werte jedes Typs übergeben können:

public static final  Set newHashSet(T... objs) { Set set = new HashSet(); Collections.addAll(set, objs); return set; }

Die Utility-Methode kann in unserem Code wie folgt verwendet werden.

Set set = newHashSet("a","b","c");

4. Verwenden von Stream seit Java 8

Mit der Einführung der Stream- API in Java 8 haben wir zusätzliche Optionen. Wir können Stream with Collectors wie im folgenden Code gezeigt verwenden:

Set set = Stream.of("a", "b", "c") .collect(Collectors.toCollection(HashSet::new));

5. Verwenden der Sammlungsbibliothek eines Drittanbieters

Es gibt mehrere Sammlungsbibliotheken von Drittanbietern, darunter Google Guava, Apache Commons Collections und Eclipse Collections, um nur einige zu nennen.

Diese Bibliotheken bieten praktische Dienstprogrammmethoden zum Initialisieren von Sammlungen wie Set. Da Google Guava hier am häufigsten verwendet wird, haben wir ein Beispiel dafür. Die Guave verfügt über praktische Methoden für veränderbare und unveränderliche Set- Objekte:

Set set = Sets.newHashSet("a", "b", "c");

In ähnlicher Weise verfügt Guava über eine Dienstprogrammklasse zum Erstellen unveränderlicher Set- Instanzen , wie im folgenden Beispiel dargestellt.

Set set = ImmutableSet.of("a", "b", "c");

6. Fazit

Zusammenfassend haben wir mehrere Möglichkeiten gesehen, wie ein HashSet während seiner Erstellung initialisiert werden kann. Diese Ansätze decken nicht unbedingt alle möglichen Wege ab. Es war nur ein Versuch, die gängigsten Wege aufzuzeigen.

Ein solcher Ansatz, der hier nicht behandelt wird, könnte darin bestehen, den Objekt-Generator zum Erstellen eines Sets zu verwenden .

Wie immer ist ein funktionierendes Codebeispiel auf GitHub verfügbar.