2016-10-30 211 views
0

我有这个变量:获取嵌套的Hashmap值

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但这张照片给我空。

更新:解决此问题的最佳方法是更改​​结构。 HashMap不是为了从一个值中获取索引而设计的。但是,有一种方法(请看下面)。

+1

如果你有_character_并希望它检索_integer_价值,为什么没有一个'地图<字符,整数>'而不是'地图<整数,字符> '? – Seelenvirtuose

+0

非常感谢!我改变了它的地图<字符,整数>,我终于可以用相同的打印值打印值。 – ChrisBlp

回答

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; 
     } 
    } 
} 
+0

你是完全正确的。我改变了我的数据结构。感谢代码,以防我想要一点点挑战哈哈。 – ChrisBlp