在哈希图中查找最接近的答案

2022-09-02 03:09:26

我想在哈希映射中搜索一个键,并找到离该键最近的一个!

    HashMap<Long, Object> map = new HashMap<Long , Object>();

所以基本上我想搜索一个长线,如果它不存在在地图上,找到最接近该长值的匹配项!我该怎么做!?

提前感恩节


答案 1

如果不迭代其所有键,就无法执行此操作。我假设这不是你所追求的,所以这里有一种方法可以做到:HashMapTreeMap

TreeMap<Long,Object> map = new TreeMap<Long,Object>();
Long key = 42;
Map.Entry<Long,Object> low = map.floorEntry(key);
Map.Entry<Long,Object> high = map.ceilingEntry(key);
Object res = null;
if (low != null && high != null) {
    res = Math.abs(key-low.getKey()) < Math.abs(key-high.getKey())
    ?   low.getValue()
    :   high.getValue();
} else if (low != null || high != null) {
    res = low != null ? low.getValue() : high.getValue();
}

答案 2

像树状图一样使用可导航地图

long key = 
NavigableMap<Long, Object> map = new TreeMap<Long , Object>();

Long before = map.floorKey(key);
Long after = map.ceilingKey(key);
if (before == null) return after;
if (after == null) return before;
return (key - before < after - key 
       || after - key < 0) 
       && key - before > 0 ? before : after;