Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.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 如何高效地搜索介于值之间的映射? Map Map=newtreemap(); map.put(100,object100); map.put(120,object120); map.put(200object200); map.put(277,object277); map.put(300object300); 地图放置(348,对象348); map.put(400object400); //..._Java - Fatal编程技术网

Java 如何高效地搜索介于值之间的映射? Map Map=newtreemap(); map.put(100,object100); map.put(120,object120); map.put(200object200); map.put(277,object277); map.put(300object300); 地图放置(348,对象348); map.put(400object400); //...

Java 如何高效地搜索介于值之间的映射? Map Map=newtreemap(); map.put(100,object100); map.put(120,object120); map.put(200object200); map.put(277,object277); map.put(300object300); 地图放置(348,对象348); map.put(400object400); //...,java,Java,如果一个方法得到一个介于映射键和下一个映射键之间的值,它将返回第一个键的对象。例如,如果使用值350调用搜索方法,它应该返回object348 键中的值差不是固定的 但是这样的搜索需要对所有条目进行迭代,直到得到正确的值。那么,我该如何使其高效呢?正如评论中所指出的,请查看。 方法图.楼层​(键)应该做你想做的。我不太清楚你是只想要低于目标数字的键的对象,还是想要低于或高于最近键的对象 我怀疑你只是在为下面的钥匙索要物品,在这种情况下,你应该会找到你想要的东西 但是,如果您希望查找其关键帧的值与

如果一个方法得到一个介于映射键和下一个映射键之间的值,它将返回第一个键的对象。例如,如果使用值
350
调用搜索方法,它应该返回
object348

键中的值差不是固定的


但是这样的搜索需要对所有条目进行迭代,直到得到正确的值。那么,我该如何使其高效呢?

正如评论中所指出的,请查看。
方法图.楼层​(键)应该做你想做的。

我不太清楚你是只想要低于目标数字的键的对象,还是想要低于或高于最近键的对象

我怀疑你只是在为下面的钥匙索要物品,在这种情况下,你应该会找到你想要的东西

但是,如果您希望查找其关键帧的值与目标值最接近的对象,那么这应该满足您的需要:

Map<Long, Object> map = new TreeMap<>();
map.put(100, object100);
map.put(120, object120);
map.put(200, object200);
map.put(277, object277);
map.put(300, object300);
map.put(348, object348);
map.put(400, object400);
//...
公共静态对象findNearestTo(长targetNumber){
if(map.isEmpty()){
返回null;//或引发适当的异常。
}
对象exactMatch=map.get(targetNumber);
如果(exactMatch!=null){
返回精确匹配;
}
最靠近下方的长距离=地图楼层(目标编号);
长近上边=map.ceilingKey(targetNumber);
如果(最靠近下方==null){
返回地图。获取(近上边);
}else if(nearestAbove==null){
返回地图。获取(最靠近下方);
}
if(targetNumber-您应该查看下面最接近的部分。您已经在使用
TreeMap
,但是您已经将变量声明为
Map
,因此您不能使用
TreeMap
中的任何方法(因为
TreeMap
NavigableMap
)。
public static Object findNearestTo(long targetNumber) {
    if (map.isEmpty()) {
        return null;  // or throw an appropriate exception.
    }
    Object exactMatch = map.get(targetNumber);
    if (exactMatch != null) {
        return exactMatch;
    }
    Long nearestBelow = map.floorKey(targetNumber);
    Long nearestAbove = map.ceilingKey(targetNumber);
    if (nearestBelow == null) {
        return map.get(nearestAbove);
    } else if (nearestAbove == null) {
        return map.get(nearestBelow);
    }
    if (targetNumber - nearestBelow <= nearestAbove - targetNumber) {
        return map.get(nearestBelow);
    } else {
        return map.get(nearestAbove);
    }
}