![](/img/trans.png)
[英]Does Collectors.toSet() always return a HashSet ? What is the contract?
[英]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)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.