首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >阅读HashMap<String、HashMap<Double、Integer>

阅读HashMap<String、HashMap<Double、Integer>
EN

Stack Overflow用户
提问于 2013-06-21 16:23:25
回答 7查看 5.2K关注 0票数 3

有一个HashMap

代码语言:javascript
运行
复制
HashMap aircraftHandling = new HashMap<String, HashMap<Double, Integer>>();

HashMap包含以下条目:

代码语言:javascript
运行
复制
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>。我通过以下方式完成此操作:

代码语言:javascript
运行
复制
HashMap lines = (HashMap<Double, Integer>) aircraftHandling.get("M");

问题是如何将DoubleInteger,即(1.22200)和(5.62300)放入两个独立的变量中?

代码语言:javascript
运行
复制
for (int i=0; i<lines.size(); i++)
{
  //doubleValue = [i]???
  //integerValue = [i]???
}
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2013-06-21 16:27:16

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

代码语言:javascript
运行
复制
Iterator<Double> it= lines.keySet().iterator();
while (it.hasNext()) {
    Double key= it.next();
    Integer value= lines.get(key);
}

顺便说一句,我不知道这是一个错误,还是只是一个糟糕的数据表示:

代码语言:javascript
运行
复制
HashMap<"M", HashMap<1.22, 200>>();
HashMap<"M", HashMap<5.62, 300>>();

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

代码语言:javascript
运行
复制
//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中添加其他值,例如:

代码语言:javascript
运行
复制
innerMap.put(1.22, 200);
innerMap.put(5.62, 300);    
票数 2
EN

Stack Overflow用户

发布于 2013-06-21 16:32:05

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

代码语言:javascript
运行
复制
for (Map.Entry<Double, Integer> entry : lines.entrySet()) {
   Double key = entry.getKey();
   Integer value = entry.getValue();
}

此HashMap包含以下条目:

代码语言:javascript
运行
复制
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>。我通过以下方式完成此操作:

不考虑所使用的语法,因为键是String,所以当您第二次尝试使用Map 中已存在的Stringput() Map中的值时,新值将覆盖旧值。

票数 3
EN

Stack Overflow用户

发布于 2013-06-21 16:30:30

试试这条路吧

代码语言:javascript
运行
复制
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();
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17230673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档