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.

14voto

Heri Punkte 4088

Wenn der enthaltene Typ des Sets eine Aufzählung ist, dann gibt es eine in Java integrierte Factory-Methode (seit 1.5):

Set<MY_ENUM> MY_SET = EnumSet.of( MY_ENUM.value1, MY_ENUM.value2, ... );

12voto

Mark Elliot Punkte 71774

Eine Verallgemeinerung von Coobirds Antwort ist Utility-Funktion zur Erstellung neuer HashSet s:

public static <T> Set<T> newHashSet(T... objs) {
    Set<T> set = new HashSet<T>();
    for (T o : objs) {
        set.add(o);
    }
    return set;
}

1 Stimmen

Init mit Größe bitte + Nullprüfung hinzufügen

9voto

import com.google.common.collect.Sets;
Sets.newHashSet("a", "b");

o

import com.google.common.collect.ImmutableSet;
ImmutableSet.of("a", "b");

7voto

Donald Raab Punkte 6053

Mit Eclipse-Kollektionen gibt es verschiedene Möglichkeiten der Initialisierung einer Set die die Zeichen 'a' und 'b' in einer Anweisung enthalten. Eclipse Collections hat Container sowohl für Objekt- als auch für primitive Typen, so dass ich illustriert habe, wie man eine Set<String> o CharSet sowie veränderbare, unveränderbare, synchronisierte und unveränderbare Versionen von beiden.

Set<String> set =
    Sets.mutable.with("a", "b");
HashSet<String> hashSet =
    Sets.mutable.with("a", "b").asLazy().into(new HashSet<String>());
Set<String> synchronizedSet =
    Sets.mutable.with("a", "b").asSynchronized();
Set<String> unmodifiableSet =
    Sets.mutable.with("a", "b").asUnmodifiable();

MutableSet<String> mutableSet =
    Sets.mutable.with("a", "b");
MutableSet<String> synchronizedMutableSet =
    Sets.mutable.with("a", "b").asSynchronized();
MutableSet<String> unmodifiableMutableSet =
    Sets.mutable.with("a", "b").asUnmodifiable();

ImmutableSet<String> immutableSet =
    Sets.immutable.with("a", "b");
ImmutableSet<String> immutableSet2 =
    Sets.mutable.with("a", "b").toImmutable();

CharSet charSet =
    CharSets.mutable.with('a', 'b');
CharSet synchronizedCharSet =
    CharSets.mutable.with('a', 'b').asSynchronized();
CharSet unmodifiableCharSet =
    CharSets.mutable.with('a', 'b').asUnmodifiable();
MutableCharSet mutableCharSet =
    CharSets.mutable.with('a', 'b');
ImmutableCharSet immutableCharSet =
    CharSets.immutable.with('a', 'b');
ImmutableCharSet immutableCharSet2 =
    CharSets.mutable.with('a', 'b').toImmutable();

Anmerkung: Ich bin ein Committer für Eclipse Collections.

5voto

Naman Punkte 21229

Mit der Veröffentlichung von java9 とのことです。 einfache Fabrikmethoden ist dies auf eine sauberere Art und Weise möglich:

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

0 Stimmen

@cellepo Nun, die Bearbeitungshistorie dieser Antwort lässt darauf schließen, dass sie später bearbeitet wurde. Allerdings ist der Inhalt derselbe und die Antwort deckt viel mehr Möglichkeiten zur Lösung der Frage ab.

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