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

2022-09-02 02:24:06

假设我在Java中有一个地图,看起来像这样:

{ 
 39:"39 to 41",
 41:"41 to 43",
 43:"43 to 45",
 45:">=45"
}

如果键按排序顺序排列(使用树状图或链接哈希映射)。现在,如果我尝试获取一个值,该值> = 39并<41.那么我应该获得字符串“39到41”。如何有效地执行此操作?


答案 1

看起来你想要的不仅仅是一个排序的地图;你想要一个可导航的地图!具体来说,您可以使用 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!

请注意,还有 、 、 和,以及返回 a 而不仅仅是 的操作。ceilingKeylowerKeyhigherKey…Entry…KeyMap.Entry<K,V>K


答案 2

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

特殊用途 /.floorKeyfloorEntry

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


推荐