[英]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.