948 Stimmen

Wie initialisiert man HashSet-Werte durch Konstruktion?

Ich muss eine Set mit Anfangswerten.

Set<String> h = new HashSet<String>();
h.add("a");
h.add("b");

Gibt es eine Möglichkeit, dies in einer einzigen Codezeile zu tun? Es ist zum Beispiel nützlich für ein endgültiges statisches Feld.

3 Stimmen

Für Java 8, Java 9 und Java 10 siehe meine Antwort stackoverflow.com/a/37406054/1216775

2 Stimmen

Die Antwort von Michael Berdyshev ist eigentlich die beste, weil sie die sauberste Art ist, eine abänderbar Set. i_am_zero Answer hat auch eine andere Möglichkeit, ein veränderbares Set zu erstellen, aber es ist ausführlicher/umständlicher [mit Lambda-Streaming]; ansonsten ist i_am_zero Answer die nächstbeste Lösung für die Breite seiner verschiedenen Optionen (über Java-Versionen hinweg).

0 Stimmen

HINWEIS: Einige Antworten lassen den Parameter `new HashSet<T>(int initialCapacity) weg, wenn Sie die Größe der Sammlung bereits kennen, verwenden Sie ihn.

68voto

Michael Berdyshev Punkte 1177

Eine der bequemsten Möglichkeiten ist die Verwendung von generischen Collections.addAll() Methode, die eine Sammlung und Varargs annimmt:

Set<String> h = new HashSet<String>();
Collections.addAll(h, "a", "b");

3 Stimmen

Ich danke Ihnen! Gut, dass ich weiter unten gelesen habe, imo sollte dies höher eingestuft werden. Dies ist großartig für Java 8 und weniger; kein Kopieren um Arrays und plumpe Streams. Danke!

1 Stimmen

Dies ist eine großartige Antwort, denn im Gegensatz zu vielen anderen Antworten gibt sie, soweit ich das beurteilen kann, eine abänderbar Fertig ;)

4 Stimmen

Ich glaube, dies ist mindestens in Java 5+ verfügbar.

58voto

Lu55 Punkte 19425

Wenn Sie nur einen Wert haben und eine unveränderlich Dies würde ausreichen:

Set<String> immutableSet = Collections.singleton("a");

1 Stimmen

Dies war sehr nützlich, da unser Code-Analyse-Tool sich beschwert, wenn Sie die new HashSet<>(Arrays.asList( _values_ )) Methode mit nur einem einzigen Wert.

10 Stimmen

Achtung, das resultierende Set<String> ist unveränderlich.

37voto

Mathias Bader Punkte 3200

Mit Java 9 können Sie Folgendes tun:

Set.of("a", "b");

und Sie erhalten eine unveränderliche Menge, die die Elemente enthält. Einzelheiten finden Sie in der Oracle Dokumentation der Schnittstelle Set .

34voto

Jason Nichols Punkte 11343

Sie können dies in Java 6 tun:

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

Aber warum? Ich finde nicht, dass es besser lesbar ist als das explizite Hinzufügen von Elementen.

6 Stimmen

Ich erstelle sie in der Erklärung. Es ist die endgültige Eigenschaft. Danke

18 Stimmen

Ah. Es ist wahrscheinlich erwähnenswert, dass Sie immer noch Elemente zu einer endgültigen Menge hinzufügen können. Deklarieren Sie die Menge einfach als final, aber fügen Sie Elemente im Konstruktor (oder an anderer Stelle) hinzu, wie Sie es normalerweise tun würden. Einer finalen Sammlung können immer noch Elemente hinzugefügt oder entfernt werden. Nur der Verweis auf die Collection selbst ist final.

5 Stimmen

+1 zu dem, was Jason Nichols sagte. Vergessen Sie nicht, Collections.unmodifiableSet(...) zu verwenden.

33voto

LanceP Punkte 924

Meiner Meinung nach ist es am verständlichsten, wenn Sie einfach Guave googeln :

Set<String> StringSet = Sets.newHashSet("a", "b", "c");

Sie ist wandelbar.

8 Stimmen

Dies ist jetzt Sets.newHashSet() .

1 Stimmen

@membersound aus welchem Paket sollte ich importieren, um Sets.newHashSet() zu verwenden?

0 Stimmen

@AbdennacerLachiheb "com.google.common.collect.Sets"

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X