Si cada objeto añadido a un java.util.HashSet implementa Object.equals() y Object.hashCode() de manera determinista, el orden de iteración sobre el HashSet garantiza que será idéntico para cada conjunto idéntico de elementos agregados, independientemente de del orden en el que se agregaron?Orden de iteración de HashSet
Pregunta de bonificación: ¿qué sucede si el orden de inserción es idéntico también?
(suponiendo Sun JDK6 con HashSet misma inicialización.)
Editar: Mi pregunta original no estaba claro. No se trata del contrato general de HashSet, sino de lo que la implementación de Sun de HashSet en JDK6 ofrece como garantía con respecto al determinismo. ¿Es intrínsecamente no determinista? ¿Qué influye en el orden utilizado por su iterador?
Creo que Michael Borgwardt lo clava: inserción orden afectará el comportamiento de colisión. El punto de Péter Török sobre la inicialización (por ejemplo, tamaño y factor de carga) también es importante. Aparte de eso, va a ser determinista. ¿La misma JVM, la misma inicialización, el mismo orden? ¿Cómo es posible que NO sea determinista? Miré el código JDK6 y es claramente determinista, ¡no hay uso de Math.random() allí! –
Es posible escribir programas determinísticos que usan Math.random(). Lo mismo ocurre con los programas no deterministas que no usan Math.random(). – whiskeysierra