Java:获取集合范围内的值

时间:2013-07-07 12:39:34

标签: java collections

假设我有一个(已排序的)集合,可以是List,Map,Set或其他任何东西。将所有值保持在一定范围内的最佳解决方案是什么。

例如我有一个整数列表,如:[1,5,7,9,12,30,50,100]

我想检索8 + - 5值,这将是:[5,7,9,12]

我知道NavigableMap非常有趣,但是我只能使用它检索一个元素。

对于比O(N)更复杂的算法,可能是O(NLogN)还是我可以使用的特定集合,您有什么提示吗?

非常感谢! COSTI

2 个答案:

答案 0 :(得分:8)

最接近您要找的是NavigableSet,其中包含following method

NavigableSet<E> subSet(E fromElement,
                   boolean fromInclusive,
                   E toElement,
                   boolean toInclusive)

如果您有一个排序列表,那么使用Collections.binarySearch()两次将允许您快速找到该范围中第一个和最后一个元素的索引。

另请注意,如果您需要的是地图,则NavigableMap会有similar method

答案 1 :(得分:0)

如果你有一个排序数组,你可以二进制搜索范围的最小值,然后二进制搜索范围的最大值O(log(n))。