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.
试试Java 6 java.util.NavigableMap.http://download.oracle.com/javase/6/docs/api/java/util/NavigableMap.html.
特殊用途floorKey/ floorEntry.
例如:floorKey(40)应该返回39.floorEntry将返回您要查找的值.