Collectors.toSet() 和 HashSet

108

请看以下示例代码:

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,这是完全符合其权利的,那么我的实现就会受到影响。
如何解决这个问题是最佳实践?
1个回答

184

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接