【发布时间】:2012-07-23 03:31:21
【问题描述】:
我有一个相当独特的要求,我的集合中应该只包含 Top 和 Bottom n 元素。这些元素是可比较的,并且集合本身是有界的,这意味着评估是在向集合添加条目时完成的。
例如,当以下一组值被插入到“Top and Bottom 10”集合中时
5、15、10、1、12、8、11、2、16、14、9、3、20、7
集合应仅包含以下内容
20、16、15、14、12、7、5、3、2、1
我正在考虑维护 2 个由 n/2 个元素组成的 SortedSet,然后在最后合并它们,但是这种方法并不干净,需要在使用结果之前进行合并步骤。
只是希望有人能更好地解决这个问题。
【问题讨论】:
-
您可能只需要一个 Treeset - 子集方法可以让您轻松访问仅顶部/底部 5 和较低/较高的方法来测试包含。 + pollFirst/Last 删除正确的项目。但是您仍然需要对其进行编码。
-
我确实通过了 TreeSet API(子集和尾集),但由于大多数操作都是基于元素而不是索引,我无法弄清楚如何实现。
-
TreeSet 是排序的,所以如果大小为 10,你知道子集(0,4)是前 5,子集(5,9)是后 5(反之亦然,im不确定)
-
assylias 可能是我的问题不清楚。将插入到集合中的条目数量很大(约 100,000),但在任何给定时间我希望它只保留前 N 或后 N。其他将被丢弃。
-
我的想法是使用 TreeSet 并在添加检查大小之前,如果 size
标签: java sorting collections filtering