Aleatorización JDK9 en conjuntos y mapas inmutables

Leyendoesta pregunta yla respuesta dada por Eugene, Descubrí que los conjuntos y mapas inmutables JDK9 introducirán una fuente de aleatoriedad que afectará su recorrido. Esto significa queorden de iteración de hecho será aleatorio, al menos entre diferentes ejecuciones de la JVM.

Como la especificación no garantiza ningún orden de recorrido / iteración para conjuntos y mapas, esto está absolutamente bien. De hecho, el código nunca debe basarse en detalles específicos de la implementación, sino en la especificación.

Sé que hoy, con JDK 8, si tengo, es decir, unHashSet y haga esto (tomado de la respuesta vinculada):

Set<String> wordSet = new HashSet<>(Arrays.asList("just", "a", "test"));

System.out.println(wordSet);

for (int i = 0; i < 100; i++) {
    wordSet.add("" + i);
}

for (int i = 0; i < 100; i++) {
    wordSet.remove("" + i);
}

System.out.println(wordSet);

Entonces laorden de iteración de los elementos cambiarán y las dos salidas serán diferentes. Esto se debe a que agregar y eliminar 100 elementos al conjunto cambia la capacidad interna delHashSet y reajusta elementos. Y este es un comportamiento perfectamente válido. No estoy preguntando sobre esto aquí.

Sin embargo, con JDK9, si hago esto:

Set<String> set = Set.of("just", "a", "test");
System.out.println(set);

Y luego, en otra instancia de la JVM, ejecuto el mismo código, las salidas pueden ser diferentes, porque se ha introducido la aleatorización.

Hasta ahora, he encontrado este excelentevideo en youtube (minuto 44:55), en el que Stuart Marks dice que una motivación para esta aleatorización es:

(...) que las personas escriben aplicaciones que tienen dependencias involuntarias en el orden de iteración. (...) De todos modos, el orden de iteración es un gran problema y creo que hay mucho código por ahí que tiene dependencias latentes en el orden de iteración que aún no se ha descubierto. (...) Entonces, nuestra respuesta a esto es aleatorizar deliberadamente el orden de iteración enSet yMap en las nuevas colecciones. Entonces, antes de que el orden de iteración de las colecciones fuera impredecible pero estable, estos son previsiblemente impredecibles. Entonces, cada vez que se inicia la JVM, obtenemos un número aleatorio y lo usamos como un valor inicial que se mezcla con los valores hash. Entonces, si ejecuta un programa que inicializa un conjunto y luego imprime los elementos en cualquier orden, obtiene una respuesta, y luego, si invoca la JVM nuevamente y ejecuta ese mismo programa, el conjunto de elementos generalmente saldría en Un orden diferente. Entonces, la idea aquí es que (...) si hay dependencias de orden de iteración en su código, lo que solía suceder en el pasado, es que salió una nueva versión de JDK y usted prueba su código y (...) ' d tardaría horas en depurar para rastrearlo hasta algún tipo de cambio en el orden de iteración. Lo que eso significaba era que había un error en ese código que dependía del orden de iteración. Ahora, si varía el orden de iteración con más frecuencia, como cada invocación de JVM, entonces (esperamos) que un comportamiento extraño se manifieste con más frecuencia, y de hecho esperamos mientras realiza las pruebas ...

Entonces, la motivación es clara, y también está claro que esta aleatorización solo afectará a los nuevos conjuntos y mapas inmutables.

Mi pregunta es:¿Hay otras motivaciones para esta aleatorización y qué ventajas tiene?

Respuestas a la pregunta(2)

Su respuesta a la pregunta