我有一个实现非重叠范围的对象列表,例如:
1 to 10
11 to 20
21 to 50
51 to 100
他们提供min()
和max()
来检索这些值。
我需要一个数据存储区来轻松检索正确的对象,给定一个必须在其间隔内的值。
我能想到的最简单的方法是创建一个有序的arraylist并简单地遍历它直到找到正确的间隔。所以在这种情况下,查找是在O(N)中完成的。
标准Java库中是否有更高效的数据结构可用于执行此任务?
答案 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提供了Range
,RangeSet
和RangeMap
类。有关详细信息,请参阅Ranges Explained文档。