2016-10-30 406 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