如何在Java中获取HashMap中某些特定键范围的值?

时间:2014-09-12 10:13:12

标签: java hashmap

如何在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");

现在我应该如何迭代以获取密钥25的值(即245,但不是 3)?

7 个答案:

答案 0 :(得分:2)

或者:

  1. 循环浏览所需的键列表,并查询HashMap以获取与该键对应的值(请注意某些键可能为空)。

  2. 循环浏览entrySet HashMap,查看该密钥是否属于您想要的密钥。

  3. 使用保持顺序的地图(LinkedHashMap按正确顺序添加)并迭代,提取所需的条目块。

答案 1 :(得分:0)

Map按键没有订单。如果您put3,然后是键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));
    }