需要一个地图,以便通过密钥和&更快速的检索。获取某个范围内的键的条目列表

时间:2011-11-23 12:28:01

标签: java collections hashmap

我需要一个Map<Integer,String>,主要需要key快速检索值。但是,我还需要检索其键在范围(n1到n2)内的所有条目(Listkey对)的value。但是,列表中不需要排序。 该地图至少会有10,000个此类条目。

我最初想过使用TreeMap,但这对于更快的检索(get()操作的O(log n))没有帮助。是否可以从HashMap获取其键在n1到n2范围内的条目列表?

最好的选择是什么?

2 个答案:

答案 0 :(得分:3)

NavigableMap的两个实现(允许您根据键范围检索子映射或子集)是TreeMapConcurrentSkipListMap,两者都提供O(log n)访问时间。

假设您按照常规HashMap要求O(1)访问时间,我建议您实施自己的(低效)“键范围”方法。换句话说,牺牲键范围操作的性能,以改善您使用常规HashMap实现的访问时间。除此之外没有其他方法:NavigableMap方法本质上依赖于以排序方式存储的数据,这意味着您永远无法实现O(1)访问时间。

答案 1 :(得分:0)

密钥的分布有多近?对于10000个元素,平均分布超过20 000种可能性,如0到19999,我可以想象搜索4到14的元素可能没问题。你会错过50%的比率。

我想知道为什么TreeMap没有帮助更快的检索(get()操作的O(log n))?

如果你有Tree,左边的值较小,右边的值较大,你可以返回子树的大部分。需要它是地图和列表吗?