Java:获取集合范围内的值

Cos*_*aru 3 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

JB *_*zet 8

最接近你要找的是a NavigableSet,它有以下方法:

NavigableSet<E> subSet(E fromElement,
                   boolean fromInclusive,
                   E toElement,
                   boolean toInclusive)
Run Code Online (Sandbox Code Playgroud)

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

另外,请注意,如果您需要的是Map,NavigableMap则有类似的方法.