Collectors.toSet()和HashSet

采取以下行示例代码:

Set<String> someSet = someColletion.stream().map(p -> p.toString()).collect(Collectors.toSet()); 

我想要一个HashSet 。 把一个debugging器的代码,我确实得到一个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 ,这完全在它的权限之内,那么我的实现就会受到影响。

这个问题的最佳实践解决scheme是什么?

如果你想保证HashSet ,使用Collectors.toCollection(HashSet::new)