有一个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");
问题是如何将Double
和Integer
,即(1.22,200)和(5.62,300)分成两个独立的变量?
for (int i=0; i<lines.size(); i++)
{
//doubleValue = [i]???
//integerValue = [i]???
}
答案 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();
}
编辑 - 我的手机回答了所以错过了一些细节。现在添加它们。