Collectors.toSet() 和 HashSet

Collectors.toSet() and HashSet

取下面一行示例代码:

Set<String> someSet = someColletion.stream().map(p -> p.toString()).collect(Collectors.toSet());

我想要一个HashSet。对代码进行调试,我确实得到了 HashSet。我查看了 java.util.stream.Collectors.toSet() 以观察以下代码:

public static <T> Collector<T, ?, Set<T>> toSet() {
    return new CollectorImpl<>((Supplier<Set<T>>) HashSet::new, Set::add,
                               (left, right) -> { left.addAll(right); return left; },
                               CH_UNORDERED_ID);
}

合同保证一个Set,执行决定一个HashSet;似乎有道理。但是,我的实现需要 HashSet 保证的恒定时间查找,而不仅仅是任何旧的 Set。如果 toSet() 的实施决定使用完全符合其权利的 FooSet,我的实施就会受到损害。

这个问题的最佳实践解决方案是什么?

如果您想要保证 HashSet,请使用 Collectors.toCollection(HashSet::new)