Ein HashSet
gemäß der Dokumentation garantiert kein Konzept der Bestellung, also was Sie sehen, könnte sehr gut in einem zukünftigen Update von Java ändern.
Allerdings, wenn Sie sich fragen, warum Java (ab sofort) spezifische Implementierung HashSet
das Ergebnis führt Sie sehen: es ist, weil die Integer
Wert 1
Hashes zu einer Stelle im internen Eintragstabelle eines HashMap
dass kommt vor der Ort, an dem 2
Hashwerte (beachten Sie, dass eine HashSet
wirklich durch eine HashMap
mit beliebigen Werten unterstützt wird). Dies ist sinnvoll, da der Hash-Code eines Integer
Objekts nur seinen Wert hat.
In der Tat kann man dies auch sehen, wenn Sie noch mehr Zahlen addieren (innerhalb eines bestimmten Bereichs: die Größe der Eingabetabelle, die 16 ist standardmäßig):
Set<Integer> set = new HashSet<>();
set.add(2);
set.add(1);
set.add(4);
set.add(3);
set.add(0);
System.out.println(set);
[0, 1, 2, 3, 4]
Iteration über eine HashSet
erfolgt durch Iterieren über die interne Entry-Tabelle, was bedeutet, dass Elemente früher in der Tabelle zuerst kommen.
Verwenden Sie mehrere Testfälle. Fügen Sie 20 Zahlen ein und sehen Sie, ob das Ergebnis gleich ist. – JNL