Randomização JDK9 em conjuntos e mapas imutáveis

Lendoessa questão ea resposta dada por Eugene, Descobri que conjuntos e mapas imutáveis do JDK9 introduzirão uma fonte de aleatoriedade que afetará sua passagem. Isso significa queordem de iteração será de fato aleatório, pelo menos entre diferentes execuções da JVM.

Como as especificações não garantem nenhuma ordem de travessia / iteração para conjuntos e mapas, isso é absolutamente correto. De fato, o código nunca deve confiar em detalhes específicos da implementação, mas nas especificações.

Eu sei que hoje, com o JDK 8, se eu tiver, ou seja, umHashSet e faça isso (extraído da resposta 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);

Então oordem de iteração dos elementos mudará e as duas saídas serão diferentes. Isso ocorre porque adicionar e remover 100 elementos ao conjunto altera a capacidade interna doHashSet e refaz elementos. E esse é um comportamento perfeitamente válido. Eu não estou perguntando sobre isso aqui.

No entanto, com o JDK9, se eu fizer isso:

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

E então, em outra instância da JVM, eu executo o mesmo código, as saídas podem ser diferentes, porque a randomização foi introduzida.

Até agora, eu achei esse excelentevídeo no youtube (minuto 44:55), em que Stuart Marks diz que uma motivação para essa randomização é:

(...) as pessoas escrevem aplicativos com dependências inadvertidas da ordem de iteração. (...) Então, de qualquer maneira, a ordem de iteração é muito importante e acho que há muito código por aí que tem dependências latentes da ordem de iteração que ainda não foram descobertas. (...) Portanto, nossa resposta a isso é aleatoriamente deliberadamente a ordem da iteração emSet eMap nas novas coleções. Portanto, enquanto antes da ordem de iteração das coleções ser imprevisível, mas estável, elas são previsivelmente imprevisíveis. Portanto, toda vez que a JVM é inicializada, obtemos um número aleatório e o usamos como um valor inicial que se mistura aos valores de hash. Portanto, se você executar um programa que inicializa um conjunto e depois imprimir os elementos em qualquer ordem, obterá uma resposta e, se você chamar a JVM novamente e executar o mesmo programa, o conjunto de elementos geralmente sairá em uma ordem diferente. Portanto, a idéia aqui é que (...) se houver dependências de ordem de iteração em seu código, o que costumava acontecer no passado, é uma nova versão do JDK que é lançada e você testa seu código e (...) ele ' levaria horas de depuração para rastreá-lo para algum tipo de alteração na ordem da iteração. O que isso significava era que havia um bug nesse código que dependia da ordem da iteração. Agora, se você variar a ordem da iteração com mais frequência, como todas as invocações da JVM, (esperamos) que esse comportamento estranho se manifeste com mais frequência e, de fato, esperamos que você esteja testando ...

Portanto, a motivação é clara e também é claro que essa randomização afetará apenas os novos conjuntos e mapas imutáveis.

Minha pergunta é:Existem outras motivações para essa randomização e quais vantagens ela tem?

questionAnswers(2)

yourAnswerToTheQuestion