最佳答案
以下面这行示例代码为例:
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
,并且实现决定于 HashSet
; 似乎是合理的。但是,我的实现需要 HashSet
保证的常量时间查找,而不是任何旧的 Set
。如果 toSet()
的实现决定使用完全在其权限范围内的 FooSet
,那么我的实现就会受到损害。
解决这个问题的最佳实践方法是什么?