在Java中使用什么数据类型来匹配间隔?

时间:2015-04-10 13:42:47

标签: java data-structures

我有一个实现非重叠范围的对象列表,例如:

1 to 10
11 to 20
21 to 50
51 to 100

他们提供min()max()来检索这些值。

我需要一个数据存储区来轻松检索正确的对象,给定一个必须在其间隔内的值。

我能想到的最简单的方法是创建一个有序的arraylist并简单地遍历它直到找到正确的间隔。所以在这种情况下,查找是在O(N)中完成的。

标准Java库中是否有更高效的数据结构可用于执行此任务?

2 个答案:

答案 0 :(得分:4)

您可以尝试使用NavigableMap,在此答案中解释了该方法:Using java map for range searches,“无洞”方法。

使用TreeMap的示例实现:

// Create TreeMap
NavigableMap<Integer, MyInterval> map = new TreeMap<>();

// Putting values
map.put(interval1.min(), myInterval);
map.put(interval2.min(), myInterval);

// Retrieving values
int value = 15;
MyInterval interval = map.floorEntry(value).getValue();

// Check if value is smaller than max()
if (value <= interval.max())
    return interval;
return null;

答案 1 :(得分:2)

无需重新发明轮子,Guava提供了RangeRangeSetRangeMap类。有关详细信息,请参阅Ranges Explained文档。