Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在树映射中获取上一个和下一个条目_Java_Treemap_Sortedmap - Fatal编程技术网

Java 如何在树映射中获取上一个和下一个条目

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

我有一个已排序的映射,我正在寻找一些关键点,需要找到最接近的“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());
    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)