[英]How to get values of some specific range of keys in HashMap in Java?
如何在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
)的值?
任何一个:
循环遍历您想要的键列表并查询HashMap
以获取与该键对应的值(请注意有些可能为空)。
循环遍历HashMap
的entrySet
以查看键是否是您想要的键。
使用保持顺序的映射(按正确顺序添加LinkedHashMap
)并迭代,提取所需的条目块。
虽然 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]
Map
的键没有顺序。 如果你不要紧, put
钥匙3
,然后将钥匙2
。 不保留此“顺序”。
我没有看到键 2、4 和 5 有什么特别之处。所以你可以这样做:
for (int key : new int[] {2, 4, 5}) {
String value = map.get(key);
}
如果您想保持 map 的插入顺序,请使用 LinkedHashMap。 然后您可以通过特定值迭代地图。 声明一个您想要其值的 Integer 数组。
int a[] = {2,4,5};
for(int i : a) {
String str = map.get(i);
doSomething(str); //method to operate on that string.
}
如果要在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]
狗,这就是你所需要的:
SortedMap<Integer, String> map = new TreeMap<Integer, String>();
map.subMap(2, 6);
if you want get int key values from HashMap
you should create new Set Array and put values to it.
**Set has specificity for sort it's keys**.
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));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.