繁体   English   中英

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

[英]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");

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

任何一个:

  1. 循环遍历您想要的键列表并查询HashMap以获取与该键对应的值(请注意有些可能为空)。

  2. 循环遍历HashMapentrySet以查看键是否是您想要的键。

  3. 使用保持顺序的映射(按正确顺序添加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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM