Verstehe meine HashSet Ausgabe nicht

JavaAnfänger72

Aktives Mitglied
Ich versuch aktuell die Collections zu begreifen.
Ein HashSet ist ein ungeortneter Collectiontyp.
Dies hat zur Folge das die Ausgabe der Elemte der
HashSet zufällig ist. Ich bekomme jedoch immer
die gleiche Ausgabe:

Jannis
Doro
Markus
Klaus

Code:
import java.util.HashSet;

public class Hash_Set {
  
    public static void main(String[] args) {
      
        String s1 = "Jannis";
        String s2 = "Markus";
        String s3 = "Klaus";
        String s4 = "Doro";
  
        HashSet menschenNamen = new HashSet();   

        menschenNamen.add(s1);  
        menschenNamen.add(s2);  
        menschenNamen.add(s3);  
        menschenNamen.add(s4);  
      
        for (Object i : menschenNamen){
            System.out.println(i);
        }
    }
}

Müsste die Ausgabe nicht immer eine andere sein,
oder habe ich da irgendwas nicht richtig verstanden?

Vielen Dank für jede Antwort !!!
 

InfectedBytes

Top Contributor
Die Ausgabe ist nicht zufällig und jedes mal anders. Ungeordnet heißt hier nur, dass die Ausgabe eine andere Reihenfolge haben kann als deine Eingabe. In deinem Beispiel hast du z.B. Doro als letztes hinzugefügt, jedoch wird Doro schon als zweites ausgegeben.
Falls du nun weitere Elemente einfügst, kann sich die Reihenfolge wieder ändern. Solange du nun nichts am HashSet änderst, wird sich auch nicht die Reihenfolge ändern
 

Meniskusschaden

Top Contributor
Mit "ungeordnet" ist nicht "zufällig" gemeint, sondern dass die Elemente nicht in einer bestimmen Ordnung ausgegeben werden, wie es beispielsweise bei einer alphabetischen Sortierung wäre. Wenn sich am Inhalt des HashSet und an der Hashfunktion nichts ändert, ändert sich auch nichts an der Reihenfolge bei der Ausgabe.

Aber es kann (muss nicht) passieren, dass die Ausgabereihenfolge bei gleichen Elementen und gleicher Hashfunktion unterschiedlich ist, falls die Elemente nicht in derselben Reihenfolge eingefügt werden.
 

JavaAnfänger72

Aktives Mitglied
Hm, also wenn "ungeordnet" nicht "zufällig" heißt und die Ausgabe nicht Lexikographisch ist, die Ausgabe aber dennoch immer die Gleiche ist, nach welchen Regelungen entscheidet der Compiler dann die Ausgabe?
 

InfectedBytes

Top Contributor
Der Compiler hat damit nichts zu tun, das liegt an der Implementation des HashSet und an dem HashCode. Die Grundidee eines HashSets kannst du dir wie folgt vorstellen (Achtung, extrem stark vereinfacht!)

Stell dir vor dein HashSet ist einfach eine Tabelle aus 26 Zeilen. Wenn du nun etwas darin einfügen möchtest (z.B. "Jannis"), dann wird eine Hash Funktion genutzt, welche diesem Objekt eine einfache Zahl zuweist. Als einfaches Beispiel, nimm an das die Hash Funktion sich nur den ersten Buchstaben anguckt und die Zahlen 0 bis 25 zurückgibt, jenachdem ob der Buchstaben eben ein A ... Z ist.
Da Jannis mit J anfängt würde in diesem Beispiel also 9 zurückgegeben werden.
Daher würde Jannis in Zeile 9 eines internen Arrays gelegt werden. Doro in Zeile 3 usw.
Wenn du nun über alle Elemente läufst, werden eben alle nicht leeren Zeilen angeguckt und daher ist deine Ausgabe Reihenfolge nicht unbedingt die Eingabe Reihenfolge.

Im Detail ist das natürlich komplizierter, insbesondere ist die Hash Funktion komplizierter und man muss außerdem noch Kollisionen behandeln, also die Fälle in denen zwei verschiedene Objekte den gleichen hash haben
 

Meniskusschaden

Top Contributor
In deinem Beispiel spielen zwei Faktoren eine Rolle.

Erstens: In welcher Reihenfolge iteriert die for-Schleife über die Elemente? Ich glaube, das wird durch die iterator()-Methode des HashSet bestimmt. Ich weiß nicht, wie es konkret implementiert ist, vermute aber, dass es einfach die physikalische Reihenfolge ist, in der die Elemente gespeichert sind.

Zweitens: Wie wird die physikalische Reihenfolge festgelegt, in der die Elemente gespeichert werden? Das wird durch die Hashfunktion bestimmt, wie @InfectedBytes bereits erläutert hat.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Verstehe Rekursion nicht ganz Java Basics - Anfänger-Themen 7
nbergmann x /= n : Verstehe ich nicht. Java Basics - Anfänger-Themen 24
S Schulaufgabe - verstehe leider die Aufgabe nicht Java Basics - Anfänger-Themen 4
ZH1896ZH Verstehe verschieden Scanner und hasNext() nicht ganz Java Basics - Anfänger-Themen 2
ZH1896ZH OOP Verstehe nicht was der Hinweis bedeutet, bitte um Hilfe! Java Basics - Anfänger-Themen 2
A Hilfe bei Rekursion,Ich verstehe nicht,wie funktioniert die Rekursion in der Methode "walk" Java Basics - Anfänger-Themen 13
A Shopping Cart Programm. Verstehe einige Zusammenhänge nicht Java Basics - Anfänger-Themen 1
T Brauche Hilfe um ein Programm zu verstehe Java Basics - Anfänger-Themen 4
K Erste Schritte Ich verstehe das Summenprogramm nicht Java Basics - Anfänger-Themen 10
S Ich verstehe die RegEx Tabelle von Javadoc nicht so ganz Java Basics - Anfänger-Themen 3
V Erste Schritte Array.length[x] in einer Schleife - ich verstehe das nicht Java Basics - Anfänger-Themen 1
Y Erste Schritte Ich verstehe this. nicht so richtig Java Basics - Anfänger-Themen 5
DaCrazyJavaExpert Methoden Verstehe Feheler nicht! Java Basics - Anfänger-Themen 7
Henri ich verstehe gerade nicht die Methode Java Basics - Anfänger-Themen 6
dave253 Ich verstehe folgenden Code nicht.. Java Basics - Anfänger-Themen 12
V Verstehe die Lösung einer Aufgabe von Grunkurs-Java nicht. Java Basics - Anfänger-Themen 11
J Verstehe die NullPointerException nicht Java Basics - Anfänger-Themen 1
P Verstehe Lösung einer Aufgabe von "Grundkurs-Java" nicht Java Basics - Anfänger-Themen 5
O Ich verstehe nicht, was Eclipse von mir will Java Basics - Anfänger-Themen 10
G Methoden Verstehe nicht was in der Methode gemacht wird? Java Basics - Anfänger-Themen 5
M Verstehe das Programm(Quellcode) nicht!! Java Basics - Anfänger-Themen 12
B Verstehe ZufallInt = (int) (Math.random() * 5 + 1); nicht Java Basics - Anfänger-Themen 9
J Rekursiver Horner-Schema-Algorithmus - Verstehe ich ihn richtig? Java Basics - Anfänger-Themen 2
F verstehe diese Variable nicht... Java Basics - Anfänger-Themen 4
A Codezeile die ich nicht verstehe Java Basics - Anfänger-Themen 7
Pentalon Ein Aufruf den ich nicht verstehe Java Basics - Anfänger-Themen 11
V Verstehe die Logik nicht ... Java Basics - Anfänger-Themen 30
C rekursive Methode verstehe nicht! Java Basics - Anfänger-Themen 3
B verstehe methode nicht methode Java Basics - Anfänger-Themen 2
B Erste Schritte Verstehe das nicht Java Basics - Anfänger-Themen 3
C verstehe get und set nicht Java Basics - Anfänger-Themen 3
J Interface Wie funktioniert das mit den Interfaces. Ich verstehe es einfach nicht! :( Java Basics - Anfänger-Themen 15
T ich verstehe array nicht! Java Basics - Anfänger-Themen 11
P for Schleife mit break, verstehe die Ausgabe nicht Java Basics - Anfänger-Themen 6
A Verstehe readLine()-Funktion nicht Java Basics - Anfänger-Themen 3
A Verstehe das GUI nicht! Java Basics - Anfänger-Themen 7
D Verstehe Zusammenhang nicht- Und ihr? Java Basics - Anfänger-Themen 4
M THREADS - Ich verstehe es nicht Java Basics - Anfänger-Themen 10
T Verstehe Bufferreader prinzip nicht Java Basics - Anfänger-Themen 3
E I-JVM verstehe ich das richtig (bytecode aufgabe) Java Basics - Anfänger-Themen 2
M Verstehe Aufgabe nicht, wie kann man schleifen einbauen? Java Basics - Anfänger-Themen 5
N Verstehe Step10 bei jME Eclipsetutorial nicht Java Basics - Anfänger-Themen 4
L Verstehe den Wert nicht! If-Anweisung Java Basics - Anfänger-Themen 5
N Verstehe diese Aufgabe nicht! Java Basics - Anfänger-Themen 16
Rudolf Verstehe das Ergebnis nicht - bitte erklären Java Basics - Anfänger-Themen 7
S Finde den Fehler nicht/ verstehe Anweisung nicht Java Basics - Anfänger-Themen 12
K Ich verstehe switch einfach nicht Java Basics - Anfänger-Themen 4
C Verstehe Code-Teil nicht. Java Basics - Anfänger-Themen 2
S Ich verstehe diese Methode nicht! Java Basics - Anfänger-Themen 6
G Verstehe das nicht. bitte um hilfe Java Basics - Anfänger-Themen 13
R Thread startet nicht, verstehe nicht warum Java Basics - Anfänger-Themen 2
R Verstehe die Ausgabe von folgendem Code nicht Java Basics - Anfänger-Themen 4
A verstehe aufgabenstellung nicht! Java Basics - Anfänger-Themen 47
S verstehe den fehler nicht Java Basics - Anfänger-Themen 14
C Verstehe die Syntax nicht! Java Basics - Anfänger-Themen 2
M Verstehe den Quellcode nicht ganz Java Basics - Anfänger-Themen 3
7 Verstehe Programm nicht Java Basics - Anfänger-Themen 6
G verstehe das problem nicht :( Java Basics - Anfänger-Themen 4
S RegEx Syntax - ich verstehe sie einfach nicht! Java Basics - Anfänger-Themen 3
G verstehe den unterschied zwischen equals und == nicht Java Basics - Anfänger-Themen 3
E Verstehe eine Schleife nicht Java Basics - Anfänger-Themen 5
B Eine Linie zeichnenmit Java, ich verstehe das einfach nicht Java Basics - Anfänger-Themen 4
G Verstehe einen Aufruf absolut nicht Java Basics - Anfänger-Themen 2
C Rechnen mit Brüchen, ist meine Lösung soweit richtig? Java Basics - Anfänger-Themen 4
P Wie kann ich meine Keylistener Klasse unterscheiden lassen, von welcher "Quelle" der Input kommt? Java Basics - Anfänger-Themen 2
A Methoden Guten Tag , ich wollte so machen dass wenn meine frog an eine fly/bee geht dann an meine Tafel geht der zahl +1 hoch. Java Basics - Anfänger-Themen 2
T Meine Klasse wird nicht gefunden Java Basics - Anfänger-Themen 1
J Meine Mails gehen nicht raus Java Basics - Anfänger-Themen 8
W Streams in Java und was bedeutet meine Konsolen-Ausgabe? Java Basics - Anfänger-Themen 4
frager2345 Warum muss ich hier im Konstruktor meine Exeption nicht abfangen ? Java Basics - Anfänger-Themen 4
I Methoden Wieso wird mein Array "a" verändert und meine Variable "a" nicht? Java Basics - Anfänger-Themen 4
sserio Wieso werden nicht alle Primzahlen bis 1000 in meine Liste gepackt ? Java Basics - Anfänger-Themen 8
C60 Methoden Main-Methode erkennt meine Arrays nicht. Java Basics - Anfänger-Themen 7
milan123 das ist meine aufgabe ich hab das problem das bei mir Wenn ich die Richtung der Linien verändern will und drei davon sind richtig, verändere ich die 4 Java Basics - Anfänger-Themen 3
O Warum ist meine Antwort falsch? Java Basics - Anfänger-Themen 3
E Meine JCombobox werte an ohne selectiert zu haben Java Basics - Anfänger-Themen 6
Zrebna Umgebungsvariable Wieso wird meine verwendete JDK-Version in der Prompt nicht erkannt? Java Basics - Anfänger-Themen 6
L Meine erste eigene Exception Klasse Java Basics - Anfänger-Themen 10
B Sind meine If-Statements richtig angesetzt ? Java Basics - Anfänger-Themen 27
N Wie kann ich eine meine Variable Final machen? Java Basics - Anfänger-Themen 1
N Klassen Warum kann meine Klasse nicht auf Methoden der anderen Klasse zugreifen? Java Basics - Anfänger-Themen 6
L Worauf muss ich achten, wenn ich externe Bibliotheken für meine Anwendungen verwende? Java Basics - Anfänger-Themen 6
B Warum werden meine System.out.println's übersprungen? Java Basics - Anfänger-Themen 9
W Wie kann ich meine Methode aufrufen? Java Basics - Anfänger-Themen 29
U Was löst meine NullPointerException aus? (Vererbung) Java Basics - Anfänger-Themen 12
H Meine Tabelle befüllen in .fxml Java Basics - Anfänger-Themen 16
E Warum kann ich meine jar-Datei nicht öffnen Java Basics - Anfänger-Themen 20
WPS1000 Input/Output Wie aktiviere ich den Daten Transfer von der RS232 in meine Java Applikation Java Basics - Anfänger-Themen 2
T Rekursion Warum bricht meine Funktion nicht ab Java Basics - Anfänger-Themen 4
S Meine Java "Wahrsagerin" Java Basics - Anfänger-Themen 9
C Ich brauche hilfe für meine Klausur Java Basics - Anfänger-Themen 13
W Wie lasse ich meine Ausgabe nach dem Lesen verschwinden ? Java Basics - Anfänger-Themen 1
W Warum funktioniert meine if Anweisung nicht? Java Basics - Anfänger-Themen 8
R Meine Ratemaschine Java Basics - Anfänger-Themen 3
V Warum speichert meine String-Variable nummerische Werte? Java Basics - Anfänger-Themen 3
V Erste Schritte Warum geht meine continue Anweisung nicht? Java Basics - Anfänger-Themen 8
GreenTeaYT HashMap dupliziert meine Elemente? Java Basics - Anfänger-Themen 2
B Ist meine Klasse richtig kommentiert? Java Basics - Anfänger-Themen 2
J Erste Schritte Vorsicht Spaghetti-Code! Wie verschachtel ich meine If-Anweisung??? Java Basics - Anfänger-Themen 4
snipesss Eclipse Neon findet meine Projekte nicht? Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben