2016-10-30 4 views
0

У меня есть этот переменные:Получить вложенные Hashmap значения

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

У меня есть первый (Integer), а третий элемент (символы), и я хочу, чтобы получить 2-й Integer с функцией. Как я могу продолжить? Я знаю, как получить значение от обычной переменной 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 не предназначен для получения индекса от значения. Однако есть способ (смотрите ниже).

+1

Если у вас есть _character_ и хотите получить значение _integer_ для него, почему не имея 'Map <символов, Integer>' вместо 'Map '? – Seelenvirtuose

+0

Спасибо большое! Я изменил его для Map , и я наконец смог напечатать значение с той же печатью. – 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

Смежные вопросы