Java 如何在树映射中获取上一个和下一个条目
我有一个已排序的映射,我正在寻找一些关键点,需要找到最接近的“before”和“after”条目,这些条目完全满足某些条件Java 如何在树映射中获取上一个和下一个条目,java,treemap,sortedmap,Java,Treemap,Sortedmap,我有一个已排序的映射,我正在寻找一些关键点,需要找到最接近的“before”和“after”条目,这些条目完全满足某些条件 Entry findAfter(TreeMap map, Key key, Predicate p) { Entry e = map.higherEntry(key); while (e!=null && !p.test(e.getValue()) e = map.higherEntry(e.getKey()); r
Entry findAfter(TreeMap map, Key key, Predicate p) {
Entry e = map.higherEntry(key);
while (e!=null && !p.test(e.getValue())
e = map.higherEntry(e.getKey());
return e;
}
这似乎效率不高,因为O(logN)中有较高的值。有更好的办法吗
我希望TreeMap有map.nextEntry(e)可以在O(1)中工作,但据我所知,没有 检查此项:
map。tailMap(key)
为您提供一个SortedSet
视图,其中包含大于或等于key
的所有键map.tailMap(key).entrySet()
将为您获取map
中键大于或等于key
的所有条目的Set
。根据,在集合
上的迭代器
以升序键顺序返回条目
所以,也许这样的事情对你有用:
Entry findAfter(TreeMap map, Key key, Predicate p) {
for (Entry e : map.tailMap().entrySet()) {
if (p.test(e.getValue() &&
!e.getKey().equals(key))
return e;
}
return null;
}
一个子集上的迭代器必须比为每个连续的更高的键搜索所有键更接近O(1)