获取Java中某个范围内的键值

Emi*_*mil 20 java map range-map

假设我在Java中有一个地图,如下所示:

{ 
 39:"39 to 41",
 41:"41 to 43",
 43:"43 to 45",
 45:">=45"
}
Run Code Online (Sandbox Code Playgroud)

如果键是按排序顺序(使用treemap或linkedhashmap).现在,如果我尝试获得> = 39且<41的值.那么我应该得到字符串"39到41".如何有效地执行此操作?

pol*_*nts 54

看起来你想要的不仅仅是一个SortedMap; 你想要一个NavigableMap!具体来说,您可以使用该floorKey操作.

这是一个例子:

    NavigableMap<Integer,String> map =
        new TreeMap<Integer, String>();

    map.put(0, "Kid");
    map.put(11, "Teens");
    map.put(20, "Twenties");
    map.put(30, "Thirties");
    map.put(40, "Forties");
    map.put(50, "Senior");
    map.put(100, "OMG OMG OMG!");

    System.out.println(map.get(map.floorKey(13)));     // Teens
    System.out.println(map.get(map.floorKey(29)));     // Twenties
    System.out.println(map.get(map.floorKey(30)));     // Thirties
    System.out.println(map.floorEntry(42).getValue()); // Forties
    System.out.println(map.get(map.floorKey(666)));    // OMG OMG OMG!
Run Code Online (Sandbox Code Playgroud)

需要注意的是也有ceilingKey,lowerKey,higherKey,也…Entry代替…Key操作以及它返回Map.Entry<K,V>而不只是K.

  • 所有人都欢呼标准运行时! (3认同)
  • 我不知道这一点,显然这里也没有人.很酷! (2认同)

hel*_*ios 7

试试Java 6 java.util.NavigableMap.http://download.oracle.com/javase/6/docs/api/java/util/NavigableMap.html.

特殊用途floorKey/ floorEntry.

例如:floorKey(40)应该返回39.floorEntry将返回您要查找的值.