采用以下示例代码:
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
,这完全在其权利范围内,那么我的实施就会受到影响。
解决此问题的最佳做法是什么?