HashSet zum Zeitpunkt der Konstruktion initialisieren

Initialisierung von HashSet zum Zeitpunkt der Erstellung

1. Überblick

In diesem kurzen Tutorial werden verschiedene Methoden voninitializing the HashSet with values, at the time of its construction vorgestellt.

Wenn Sie stattdessen die Funktionen vonHashSet untersuchen möchten, lesen Siethis core article here.

Wir werden uns mit Javabuilt-in methods since Java 5 and before befassen, gefolgt von neuenmechanism introduced since Java 8. Wir werden auch eincustom utility method sehen und schließlich die Funktionen von3rd party collection libraries untersuchen, insbesondere Google Guava.

Wenn Sie das Glück haben, bereits auf JDK9 + migriert zu sein, können Sie einfachcollection factory methods. verwenden

2. Integrierte Java-Methoden

Beginnen wir mit der Untersuchung von drei integriertenmechanisms available since the Java 5 or before.

2.1. Verwenden einer anderen Sammlungsinstanz

Wir können ein vorhandenesinstance of another collection übergeben, um dasSet zu initialisieren. Im folgenden Beispiel verwenden wir ein inline erstelltesList:

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

2.2. Verwenden der anonymen Klasse

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

Beachten Sie die Verwendung von doppelten geschweiften Klammern. Dieser Ansatz isttechnically very expensive, da bei jedem Aufruf eine anonyme Klasse erstellt wird.

Je nachdem, wie oft wirSet initialisieren müssen, können wirtry to avoid using this approach:

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

2.3. Verwenden der Dienstprogrammmethode "Sammlungen" seit Java 5

DieCollections utility-Klasse von Java bietet die Methodesingleton zum Erstellen einesSet mit einem einzelnen Element. Die mit dersingleton-Methode erstellteSet-Instanz istimmutable, was bedeutet, dass wir keine weiteren Werte hinzufügen können.

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

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

3. Definieren der benutzerdefinierten Dienstprogrammmethode

Wir können einestatic final-Methode wie folgt definieren. Die Methodeaccepts variable arguments.

Die Verwendung vonCollections.addAll, das das Erfassungsobjekt und ein Array von Werten akzeptiert, istbest among others, da der Aufwand für das Kopieren von Werten gering ist.

Diemethod is using generics, damit 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 vonStream seit Java 8

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

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

5. Verwenden der 3rd Party Collection Library

Es gibt mehrere Sammlungen 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. DaGoogle Guava eines der am häufigsten verwendeten hier ist, haben wir ein Beispiel dafür. Die Guave verfügt über praktische Methoden für veränderbare und unveränderlicheSet-Objekte:

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

In ähnlicher Weise verfügt Guava über eine Dienstprogrammklasse zum Erstellen vonimmutable Set instances, wie im folgenden Beispiel dargestellt.

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

6. Fazit

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

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

Wie immer ist ein funktionierendes Codebeispielover on GitHub verfügbar.