如何在Java中HashMap
获取某些特定范围键的值?
假设我有一个HashMap
,其键和值如下:
Map <Integer , String> map = hnew HashMap <Integer , String>();
map.put(1 , "A");
map.put(3 , "C");
map.put(2 , "B");
map.put(4 , "D");
map.put(5 , "E");
map.put(6 , "F");
现在我应该如何迭代以获取密钥2
到5
的值(即2
,4
和5
,但不是 3
)?
答案 0 :(得分:2)
或者:
循环浏览所需的键列表,并查询HashMap
以获取与该键对应的值(请注意某些键可能为空)。
循环浏览entrySet
HashMap
,查看该密钥是否属于您想要的密钥。
使用保持顺序的地图(LinkedHashMap
按正确顺序添加)并迭代,提取所需的条目块。
答案 1 :(得分:0)
Map
按键没有订单。如果您put
键3
,然后是键2
,则无关紧要。这个“订单”没有保留。
我没有看到关于键2,4和5的任何特别之处。所以你可以这样做:
for (int key : new int[] {2, 4, 5}) {
String value = map.get(key);
}
答案 2 :(得分:0)
如果要维护地图插入的顺序,请使用LinkedHashMap。然后,您可以通过特定值迭代地图。 声明一个您想要值的Integer数组。
int a[] = {2,4,5};
for(int i : a) {
String str = map.get(i);
doSomething(str); //method to operate on that string.
}
答案 3 :(得分:0)
如果您希望Map
的键中包含可预测的顺序,则需要使用子类LinkedHashMap
。
以下是执行所需操作的代码示例:
public class Snippet {
public static void main(String[] args) {
LinkedHashMap<Integer, String> map = new LinkedHashMap<Integer, String>();
map.put(1, "A");
map.put(3, "C");
map.put(2, "B");
map.put(4, "D");
map.put(5, "E");
map.put(6, "F");
System.out.println(valuesBetween(2, 5, map));
}
public static List<String> valuesBetween(int from, int to, LinkedHashMap<Integer, String> map) {
List<String> result = new ArrayList<>();
boolean inRange = false;
for (Map.Entry<Integer, String> entry : map.entrySet()) {
if (entry.getKey() == from)
inRange = true;
if (inRange)
result.add(entry.getValue());
if (entry.getKey() == to)
break;
}
return result;
}
}
这将打印:
[B, D, E]
答案 4 :(得分:0)
虽然Java的Map
接口未在其元素上定义特殊顺序,但地图实现可能会很好地定义一个顺序。子接口SortedMap
定义所有键必须自然排序,并添加诸如subMap
之类的新方法来访问值范围。子子界面NavigableMap
可以添加更多内容。
Java标准库SortedMap
中最突出的实现是TreeMap
:
SortedMap<Integer, String> map = new TreeMap<>();
map.put(1 , "A");
map.put(3 , "C");
map.put(2 , "B");
map.put(4 , "D");
map.put(5 , "E");
map.put(6 , "F");
System.out.println(map.subMap(2, 6).values()); // [B, C, D, E]
答案 5 :(得分:-1)
狗,这就是你所需要的:
SortedMap<Integer, String> map = new TreeMap<Integer, String>();
map.subMap(2, 6);
答案 6 :(得分:-1)
if you want get int key values from HashMap
you should create new array and put values to newArray
and Set sort it's keys .In there I use Set for newArray
Map<Integer,String> students = new HashMap<>();
students.put(1, "Rashid");
students.put(3, "Cosqun");
students.put(2, "Ulvi");
Set<Integer> keys = students.keySet();
for (int key : keys) {
System.out.println(key+" "+students.get(key));
}