【问题标题】:Get nested Hashmap values [duplicate]获取嵌套的Hashmap值[重复]
【发布时间】:2017-03-12 17:25:33
【问题描述】:

我有这个变量:

Hashmap<Integer,HashMap<Integer,Character>> map;

我有第一个(整数)和第三个元素(字符),我想用函数获取第二个整数。我该如何进行? 我知道如何从普通的 Hashmap 变量中获取值,但我不知道如何使用嵌套的 hashmap...

我已经试过了:

import java.util.*;
public class Test{

  public static void main(String[] args){

   HashMap<Integer,HashMap<Integer,Character>> map;
   map = new HashMap<Integer,HashMap<Integer,Character>>();
   map.put(0,new HashMap<Integer,Character>());
   map.get(0).put(7,'c');

   System.out.println((map.get(0)).get('c'));
  }
}

我想打印 7,但这个打印结果为 null。

更新:解决这个问题的最好方法是改变结构。 HashMap 并非旨在从值中获取索引。但是,有一种方法(请看下面)。

【问题讨论】:

  • 如果您有一个 character 并希望为其检索 integer 值,为什么不使用 Map&lt;Character, Integer&gt; 而不是 Map&lt;Integer, Character&gt; ?
  • 非常感谢!我将它更改为 Map ,我终于可以用相同的打印打印值了。

标签: java hashmap nested


【解决方案1】:

HashMap 并非旨在通过值获取键,这正是您尝试使用.get(c) 所做的事情。它旨在获取给定键的值。

如果您想要高效查找,您可能应该更改数据结构。

否则,您将不得不遍历内部 Map 的条目以找到具有请求值的键(可能有多个这样的键)。

例如:

HashMap<Integer,Character> inner = map.get(0);
Integer key = null;
if (inner != null) {
    for (Map.Entry<Integer,Character> entry : inner.entrySet()) {
        if (entry.getValue().equals('c')) {
            key = entry.getKey();
            break;
        }
    }
}

【讨论】:

  • 你完全正确。我改变了我的数据结构。谢谢你的代码,以防我想要一点挑战哈哈。
猜你喜欢
  • 2020-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-10
相关资源
最近更新 更多