Важно ли использовать Characteristics.UNORDERED в коллекционерах, когда это возможно?

Поскольку я часто использую потоки, некоторые из которых имеют дело с большим объемом данных, я подумал, что было бы неплохо предварительно выделить коллекторы, основанные на коллекции, приблизительным размером, чтобы предотвратить дорогостоящее перераспределение по мере роста коллекции. Итак, я придумал это и похожие для других типов коллекций:

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

Используется как это

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

Я обеспокоен тем, что реализацияCollectors.toSet() устанавливаетCharacteristics перечислите чтоCollectors.toCollection() не:Characteristics.UNORDERED, Там нет удобного вариантаCollectors.toCollection() установить желаемые характеристики за пределы по умолчанию, и я не могу скопировать реализациюCollectors.toSet() из-за проблем видимости. Итак, чтобы установитьUNORDERED характеристика я вынужден сделать что-то вроде этого:

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});
}

Итак, вот мои вопросы: 1. Это мой единственный вариант для создания неупорядоченного коллектора для чего-то простого, как обычайtoSet() 2. Если я хочу, чтобы это работало идеально, нужно ли применять неупорядоченную характеристику? я прочелвопрос на этом форуме где я узнал, что неупорядоченная характеристика больше не распространяется обратно в поток. Это все еще служит цели?

Ответы на вопрос(1)

Ваш ответ на вопрос