当前位置: 首页 > 知识库问答 >
问题:

收藏家。toSet()和HashSet

文寒
2023-03-14

以下面这行代码为例:

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()的实现决定使用一个efSet,这完全在它的权利范围内,我的实现就受到了损害。

这个问题的最佳解决方案是什么?

共有1个答案

陈翰林
2023-03-14

如果您想要一个有保证的哈希集,请使用收集器。toCollection(HashSet::new)

 类似资料:
  • Javadoc说 返回一个收集器,该收集器将输入元素累加到一个新集合中。无法保证返回的集合的类型、可变性、可序列化性或线程安全性;如果需要对返回集进行更多控制,请使用toCollection(java.util.function.Supplier)。 所以似乎是一个避免出现问题的好主意。 我的问题是,尽管我尽了最大努力,我还是无法从中得到比 下面是我使用的代码: 那么,为什么Javadoc声明没有

  • 我在字符串数组的流处理中看到了一个有趣的行为。 我在做这样的事 预期结果应该是一组[1,2],但实际结果是[2,1]。toSet()创建一个HashSet而不是SortedSet,所以它不应该扰乱数据的顺序。不知道为什么!!

  • 收藏资讯 取消收藏资讯 获取收藏资讯 收藏资讯 POST /news/{news}/collections Response Headers Status: 201 Created 取消收藏资讯 DELETE /news/{news}/collections Response Headers Status: 204 No Content 获取收藏资讯 GET /news/collectio

  • 收藏列表 添加收藏 取消收藏 获取用户收藏的专辑 GET /music/collections Response Status: 200 OK [ { "id": 2, // 专辑id "created_at": "2017-03-15 17:04:31", "updated_at": "2017-06-27 18:40:56", "title": "少女情

  • 收藏 取消收藏 收藏列表 收藏 POST /feeds/:feed/collections Response Status: 201 Created { "message": [ "收藏成功" ] } 取消收藏 DELETE /feeds/:feed/uncollect Response Status: 204 No Centent 收藏列表 GET /feeds/col

  • 我正在学习Kotlin,它看起来很可能我想在下一年把它作为我的主要语言。然而,我不断得到矛盾的研究,Kotlin有或没有不可变的集合,我试图弄清楚我是否需要使用Google Guava。 有人能给我一些指导吗?它是否默认使用不可变集合?哪些运算符返回可变或不可变的集合?若否,有否计划实施?