Lädt...

HashSet in Java

Lege eine HashSet<String> namens tags an, rufe tags.add("oak"); auf, dann tags.add("pine");, dann erneut tags.add("oak");, und gib tags.size() aus. Kompiliere Bin.java und starte java Bin. Der Bildschirm soll eine Zeile zeigen: 2. Das zweite oak hat keinen dritten Wert erzeugt. Einzigartige Werte in einem Set — das lehrt diese Seite.

Einzigartige Werte, keine Schlüssel-Wert-Paare

Auf der HashMap-Seite hast du mit put und get einen Schlüssel gespeichert, der auf einen Wert zeigte. Ein HashSet speichert Werte allein. Jeder Wert erscheint höchstens einmal. Wenn du dasselbe Wort zweimal addst, hält das Set es weiterhin einmal. Für den Lehrpfad dieser Seite gibt es keinen eigenen Schlüsselstring.
Öffne Bin.java. Behalte den öffentlichen Klassennamen Bin, damit er zum Dateinamen passt. Lösche übrig gebliebene HashMap-Zeilen, scores.put, scores.get und jedes Desk-Demo. Die gehören zur Map-Seite. Lösche auch jedes übrig gebliebene ArrayList, Rack, Scanner oder nextLine. Das Programm darf nicht auf Eingabe warten.
Schreibe nahe oben, oberhalb von public class Bin:
import java.util.HashSet;
Dieser Import bringt den Typ HashSet unter dem Kurznamen in Reichweite. Ohne ihn sieht javac auf dieser Seite den Kurznamen HashSet nicht. Schreibe java.util und HashSet sorgfältig. Erfinde hier kein import java.util.*; als Pflicht — ein genauer Import reicht.
Lege in main das Set an:
HashSet<String> tags = new HashSet<String>();
Die spitzen Klammern halten String, weil diese Lektion Wörter speichert. Der Name tags ist der Name, den du behältst. Der Aufruf new HashSet<String>() baut ein leeres Set. In diesem Moment hält es null Werte.

oak, pine, erneut oak hinzufügen — dann size

Rufe tags.add("oak"); in einer eigenen Zeile auf. Dann rufe tags.add("pine"); auf. Dann rufe tags.add("oak"); ein drittes Mal mit demselben Wort auf. Der dritte Aufruf vergrößert das Set nicht. Schreibe dann:
System.out.println(tags.size());
Drucke für die erste behaltene Datei die Größe, nicht das ganze Set. Die Zahl 2 beweist, dass das Duplikat ignoriert wurde. Speichere vor dem Kompilieren.

Bin size after duplicate add

java
import java.util.HashSet;

public class Bin {
    public static void main(String[] args) {
        HashSet<String> tags = new HashSet<String>();
        tags.add("oak");
        tags.add("pine");
        tags.add("oak");
        System.out.println(tags.size());
    }
}

Aus dem Ordner mit Bin.java führe javac Bin.java aus. Wenn Klammern, geschweifte Klammern, spitze Klammern und Semikolons passen, schreibt javac keine eigene Zeile. Starte dann java Bin — nicht java Bin.java und nicht java HashSet. Lass die Endung .java beim Laufbefehl weg.
Das Programm soll eine Zeile drucken und stoppen: 2. Es soll dich nicht tippen lassen. Wenn das Terminal auf Tastatureingabe wartet, steckt noch ein nextLine-Aufruf aus einer älteren Übung in einer Datei. Lösche diesen Aufruf und behalte die Anlage, die drei add-Zeilen und System.out.println(tags.size());.
Geh den Lauf einmal durch. Java startet bei Bin.main. Der Import hat bereits benannt, welches HashSet du meinst. Die new-Zeile baut ein leeres Set. Das erste add speichert oak. Das zweite speichert pine. Das dritte add("oak") findet oak bereits und hebt den Zähler nicht. Der Druck von size() schreibt 2. Der Bildschirm zeigt 2. Nichts anderes soll erscheinen. Siehst du 3, läufst du nicht diese HashSet-Datei, oder du hast ein anderes drittes Wort wie elm hinzugefügt. Siehst du leaf, läuft noch ein Desk-HashMap-Demo — wechsle zu java Bin. Siehst du [oak, pine], hast du das ganze Set statt size() gedruckt; behalte den Größen-Druck für diese erste Unterrichtsdatei.
Wenn javac sagt, es finde HashSet nicht, fehlt die Import-Zeile, ist falsch geschrieben oder steht nach public class Bin. Verschiebe import java.util.HashSet; über die Klassenzeile. Schreibst du tags.add(oak); ohne Anführungszeichen, behandelt javac oak als fehlenden Namen. Behalte die Anführungszeichen. Rufe auf dieser Seite kein put auf einem HashSet auf — dieser Name gehört zu HashMap.

Mit contains fragen

Eine zweite Bin-Datei prüft, ob oak nach denselben ersten beiden Adds im Set liegt.

Bin contains oak

java
import java.util.HashSet;

public class Bin {
    public static void main(String[] args) {
        HashSet<String> tags = new HashSet<String>();
        tags.add("oak");
        tags.add("pine");
        System.out.println(tags.contains("oak"));
    }
}

Kompiliere und starte diese zweite Datei auf dieselbe Weise. Der Bildschirm zeigt true. Der Aufruf contains("oak") fragt, ob dieser Wert im Set sitzt. Er liefert ein boolean. Fragst du contains("elm") nach nur oak und pine, zeigt der Bildschirm false — das ist gültig, aber die behaltene zweite Datei nutzt "oak", damit der Bildschirm true ist.
Erfinde auf dieser Seite keine Schleife über das Set als Pflicht. Eine spätere Seite — iterating — geht Sammlungen durch. Bleib hier bei add, size und contains.

Neben HashMap

Eine kurze Tabelle hält den Unterschied klar.

📊 HashSet vs HashMap

Piece On this page
store tags.add("oak"); — value only
duplicate second add("oak") does not grow size
read check tags.contains("oak") → true
HashMap leftover put / get — not this page’s path
Die Tabelle ist nur eine Erinnerung. Die getippten Stücke, die du behältst, sind der HashSet-Import, die Anlagezeile, die add-Aufrufe, size() und contains.

Vergleich mit HashMap und mit ArrayList

Auf der HashMap-Seite nutzten put und get einen Schlüssel. Auf dieser Seite nutzen add und contains den Wert selbst. Eine übrig gebliebene Desk-Datei, die leaf druckt, ist eine andere Lektion. Für diese Seite behalte HashSet<String> tags und das Größen-Demo, das 2 druckt.
Eine ArrayList kann dasselbe Wort zweimal halten. Ein HashSet wächst nicht für ein zweites identisches add dieses Worts. Diese Einzigartigkeit ist der Punkt dieser Lektion. Mische tags.get(0) nicht in die Bin-Demos — Sets nutzen auf dieser Seite keine Listen-Slotnummern.
Wenn alte Desk.java- oder Rack.java-Dateien noch in der Nähe liegen, lass sie oder lösche sie nur, wenn sie verwirren, welche Klasse du startest. Starte java Bin, nachdem du die HashSet-Datei dieser Lektion kompiliert hast.

Was für iterating bleibt

Diese Seite öffnet ein Set einzigartiger Werte. Die nächste Seite geht Sammlungen mit einer Schleife durch. Bleib hier bei add, size und contains. Erfinde auf dieser Seite kein for-each über das Set als Pflicht; das Lernziel ist Einzigartigkeit und der Bildschirm 2 von size().

Vor iterating

Du kannst java.util.HashSet importieren, HashSet<String> tags anlegen, oak, pine und erneut oak hinzufügen und dann tags.size() drucken, um 2 zu sehen. Eine zweite Datei kann tags.contains("oak") drucken und true zeigen. Kompiliere Bin.java und starte java Bin für jedes behaltene Demo. Das Set behielt einzigartige Werte. Die nächste Seite ist iterating, wo du die Werte einer Sammlung einzeln durchgehst.
Behalte den Import oberhalb der Klasse. Behalte das doppelte add("oak") im Größen-Demo, damit der Zähler 2 bleibt. Behalte contains für die boolean-Prüfung. Diese Gewohnheiten sind der Checkpoint dieser Seite, bevor du weitergehst. Wenn size() nach drei Adds mit wiederholtem oak 2 zeigt, hat HashSet seine Arbeit für diese Lektion getan und du bist bereit für das nächste Thema.

🧠 Testen Sie Ihr Wissen

Bereit zum Start

Testen Sie Ihr Wissen

Fordern Sie sich mit diesem interaktiven Quiz heraus und sehen Sie, wie gut Sie das Thema verstehen

❓
6
Fragen
🎯
70%
Zum Bestehen
♾️
∞
Zeit
🔄
∞
Versuche

📝 Anweisungen

  • Lesen Sie jede Frage sorgfältig
  • Wählen Sie die beste Antwort für jede Frage
  • Sie können das Quiz so oft wiederholen, wie Sie möchten
  • Ihr Fortschritt wird oben angezeigt