Collectors.toSet() 和 HashSet

2022-08-31 10:18:21

请看下面这行示例代码:

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

我想要一个.将调试器带到代码中,我确实得到了一个.我看了一下,观察了以下代码:HashSetHashSetjava.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);
}

合同保证 a ,并实现决定 a ;似乎是合理的。但是,我的实现需要由 a 保证的常数时间查找,而不仅仅是任何旧的 。如果 的实现决定使用 say a ,这完全在其权限范围内,则我的实现受到损害。SetHashSetHashSetSettoSet()FooSet

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


答案 1

如果你想要一个有保证的,请使用 Collectors.toCollection(HashSet::new)HashSet


答案 2

推荐