读取HashMap <string,hashmap <double,=“”integer =“”> </string,>

时间:2013-06-21 08:23:25

标签: java hashmap

有一个HashMap

HashMap aircraftHandling = new HashMap<String, HashMap<Double, Integer>>();

HashMap包含以下条目:

HashMap<"M", HashMap<1.22, 200>>();
HashMap<"M", HashMap<5.62, 300>>();
HashMap<"L", HashMap<10.11, 900>>();

我需要输入密钥“M”的条目,即HashMap<1.22, 200>HashMap<5.62, 300>。我通过以下方式执行此操作:

HashMap lines = (HashMap<Double, Integer>) aircraftHandling.get("M");

问题是如何将DoubleInteger,即(1.22,200)和(5.62,300)分成两个独立的变量?

for (int i=0; i<lines.size(); i++)
{
  //doubleValue = [i]???
  //integerValue = [i]???
}

7 个答案:

答案 0 :(得分:3)

您可以使用增强型for循环来读取元素:

for (Map.Entry<Double, Integer> entry : lines.entrySet()) {
   Double key = entry.getKey();
   Integer value = entry.getValue();
}

此HashMap包含以下条目:

HashMap<"M", HashMap<1.22, 200>>();
HashMap<"M", HashMap<5.62, 300>>();
HashMap<"L", HashMap<10.11, 900>>();

我需要获得密钥“M”的条目,即HashMap&lt; 1.22,200&gt;和HashMap&lt; 5.62,300&gt;。我通过以下方式执行此操作:

不考虑使用的语法,因为密钥是String,第二次尝试put() Map使用已经String密钥的值存在于Map 中,新值将覆盖旧值。

答案 1 :(得分:2)

这是通过迭代键集来提取HashMap键值对的方法:

Iterator<Double> it= lines.keySet().iterator();
while (it.hasNext()) {
    Double key= it.next();
    Integer value= lines.get(key);
}

在旁注中,我不知道这是一个错误,还是只是一个错误的数据表示:

HashMap<"M", HashMap<1.22, 200>>();
HashMap<"M", HashMap<5.62, 300>>();

但如果它看起来如此,那是不可能的。 Map可以为单个键设置单个值!这意味着,如果您为某个键"M"添加了一些值,并且您为同一个键再次执行该操作,则后者将覆盖之前的值。你应该做的是:

//get the inner map for "M"
HashMap<Double, Integer> innerMap= aircraftHandling.get("M");
if (innerMap == null) {
    //if it does not exist instantiate it
    innerMap= new HashMap<Double, Integer>();
    aircraftHandling.put("M", innerMap);
}

现在,在innerMap中添加其他值,例如:

innerMap.put(1.22, 200);
innerMap.put(5.62, 300);    

答案 2 :(得分:2)

尝试这种方式

Map<Double, Integer> lines = (HashMap<Double, Integer>) aircraftHandling.get("M");
// ^add this generic types here so you wont have to cast them later with getters
for (Map.Entry<Double, Integer> entry:lines.entrySet()){
    Double key = entry.getKey();
    Integer value = entry.getValue();
}

答案 3 :(得分:2)

在这里你拥有它:

HashMap<String, HashMap<Double, Integer>> aircraftHandling = new HashMap<String,    HashMap<Double, Integer>>();

HashMap<Double, Integer> subMap1 = new HashMap<Double, Integer>();
subMap1.put(1.22, 200);

HashMap<Double, Integer> subMap2 = new HashMap<Double, Integer>();
subMap1.put(5.62, 300);

aircraftHandling.put("M", subMap1);
aircraftHandling.put("L", subMap2);

HashMap<Double, Integer> lines = aircraftHandling.get("M");

for (Entry<Double, Integer> set : lines.entrySet()) {
    Double doubleValue = set.getKey();
    Integer integerValue = set.getValue();
}

答案 4 :(得分:2)

首先,地图不能有重复的密钥。如果您插入重复键,则前一个键将消失。您可以使用以下代码分隔键和值:

     HashMap lines = (HashMap<Double, Integer>) aircraftHandling.get("M");

     for(Map.Entry<Double, Integer> entry: lines ){

        doubleValue = entry.getKey();
        integerValue =entry.getValue();
     }

答案 5 :(得分:2)

使用foreach循环和方法HashMap.entrySet()

HashMap<Double, Integer> map=...
for(Entry<Double,Integer> entry : map.entrySet()){
   Double d = entry.getKey();
   Integer i = entry.getValue();
}

答案 6 :(得分:1)

密钥M不能有2个值。我希望您在设置值时已经处理了这个值。你应该为值M添加一个hashmap。

您只需要获取与密钥M

对应的哈希映射
HashMap lines = (HashMap<Double, Integer>) aircraftHandling.get("M");

然后迭代此地图中的所有条目

Iterator it = lines.entrySet().iterator();
while (it.hasNext()) {
    Map.Entry pairs = (Map.Entry)it.next();
    double d = pairs.getKey().doubleValue();
    int i = pairs.getValue().intValue();
}
编辑 - 我的手机回答了所以错过了一些细节。现在添加它们。