采用以下示例代码行:
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);
}
合同保证a Set
,执行决定a HashSet
;似乎有道理。但是,我的实现需要由 a 保证的恒定时间查找HashSet
,而不仅仅是任何旧的Set
. 如果实现toSet()
决定使用 say a FooSet
,这完全在其权利范围内,那么我的实现就会受到影响。
这个问题的最佳实践解决方案是什么?