【问题标题】:Index based subset of SortedSet基于索引的 SortedSet 子集
【发布时间】:2014-09-16 20:57:52
【问题描述】:

我需要将 sourceList 中的对象添加到集合中,当我们将对象添加到集合中时,该集合对集合进行排序。我正在考虑使用TreeSet

TreeSet bookSet

基于某些条件,我需要获取bookSet 的子集。子集将是前 N 个元素。 N 的值只有在整个bookSet 是从另一个sourceList 准备之后才知道的。

无论如何我可以使用索引 N 获取 bookSet 的子集,类似于 arrayList.subList(0,N)。

我可以使用headSet,但我需要知道第 N+1 个元素。

【问题讨论】:

  • 使用headSet(),然后在其上调用iterator()并遍历接下来的N个元素。
  • 您需要遍历集合并获取前 N 个元素。那将是线性时间,或者如果您仍然对 sourceList 有句柄,则从 sourceList 中获取 N+1 个元素,然后调用 headSet
  • sourceList 中的元素是随机排序的。

标签: java collections sortedset


【解决方案1】:

取决于你想要达到的目标:

  • 您可以使用TreeSet.iterator() 并迭代N 次。
  • 在 Java 8 中,您可以使用 bookSet.stream().limit(N)
  • 您可以简单地复制到new ArrayList(bookSet),然后获取一个子列表

【讨论】:

  • 看起来第三个选项是我正在寻找的 :)
  • 选项 3 将消除您自己的迭代,但在引擎盖下,它的作用相同,如果您的集合很大,最好选择选项 1,它可以避免复制整个集合
  • 馆藏并不多。最大元素可以是 16。
  • 如果您真的需要选项 3,那么只需对原始列表进行排序并获取子列表。
猜你喜欢
  • 2012-11-17
  • 2017-06-02
  • 2021-10-16
  • 1970-01-01
  • 2016-12-10
  • 1970-01-01
  • 2019-07-06
  • 2023-03-17
  • 1970-01-01
相关资源
最近更新 更多