É importante usar o Characteristics.UNORDERED nos coletores, quando possível?

Como eu uso bastante os fluxos, alguns deles lidando com uma grande quantidade de dados, pensei que seria uma boa idéia pré-alocar meus coletores baseados em coleções com um tamanho aproximado para evitar uma realocação dispendiosa à medida que a coleção cresce. Então, eu vim com isso, e similares para outros tipos de coleção:

public static <T> Collector<T, ?, Set<T>> toSetSized(int initialCapacity) {
    return Collectors.toCollection(()-> new HashSet<>(initialCapacity));
}

Usado assim

Set<Foo> fooSet = myFooStream.collect(toSetSized(100000));

Minha preocupação é que a implementação deCollectors.toSet() define umCharacteristics enum queCollectors.toCollection() não:Characteristics.UNORDERED. Não há variação conveniente deCollectors.toCollection() para definir as características desejadas além do padrão e não consigo copiar a implementação deCollectors.toSet() devido a problemas de visibilidade. Então, para definir oUNORDERED característica eu sou forçado a fazer algo assim:

static<T> Collector<T,?,Set<T>> toSetSized(int initialCapacity){
    return Collector.of(
            () -> new HashSet<>(initialCapacity),
            Set::add,
            (c1, c2) -> {
                c1.addAll(c2);
                return c1;
            },
            new Collector.Characteristics[]{IDENTITY_FINISH, UNORDERED});
}

Então, aqui estão minhas perguntas: 1. Essa é minha única opção para criar um coletor não ordenado para algo tão simples quanto um costumetoSet() 2. Se eu quiser que isso funcione idealmente, é necessário aplicar a característica não ordenada? Eu liuma pergunta neste fórum onde aprendi que a característica não ordenada não é mais propagada novamente para o fluxo. Ainda serve a um propósito?

questionAnswers(1)

yourAnswerToTheQuestion