Wenn jedes Objekt, das zu einem java.util.HashSet hinzugefügt wird, Object.equals() und Object.hashCode() deterministisch implementiert, ist die Iterationsreihenfolge über das HashSet garantiert identisch für jeden identischen Satz von Elementen hinzugefügt, unabhängig der Reihenfolge, in der sie hinzugefügt wurden?Iterationsreihenfolge von HashSet
Bonusfrage: Was ist, wenn der Anzeigenauftrag identisch ist?
(Unter der Annahme, Sun JDK6 mit gleicher HashSet Initialisierung.)
Edit: Meine ursprüngliche Frage nicht klar war. Es geht nicht um den allgemeinen Vertrag von HashSet, sondern darum, was Suns Implementierung von HashSet in JDK6 als Garantien für Determinismus bietet. Ist es von Natur aus nicht deterministisch? Was beeinflusst die Reihenfolge des Iterators?
denke ich, Michael Borgwardt Nägel es: Einsetzen Ordnung Kollisionsverhalten bewirkt. Péter Töröks Argumentation über die Initialisierung (z. B. Größe und Lastfaktor) ist ebenfalls wichtig. Ansonsten wird es deterministisch sein. Gleiche JVM, gleiche Initialisierung, gleiche Reihenfolge? Wie könnte es möglicherweise NICHT deterministisch sein? Ich habe den JDK6-Code angeschaut und es ist eindeutig deterministisch - kein Einsatz von Math.random() drin !!! –
Es ist möglich, deterministische Programme zu schreiben, die Math.random() benutzen. Gleiches gilt für nicht-deterministische Programme, die Math.random() nicht verwenden. – whiskeysierra