2016-10-30 3 views
0

値。私はどのように進めますか? 私はこのすでにやってみたが、私は通常のハッシュマップ変数から値を取得する方法を知っているが、私は、ネストされたハッシュマップでそれを行う方法がわからない...はネスト取得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

は、なぜ代わりに ''地図<整数、文字>の '地図<文字、整数>を持っていません'? – Seelenvirtuose

+0

ありがとう!私はMap のためにそれを変更し、最終的に同じプリントで値を印刷することができました。 – ChrisBlp

答えて

1

HashMapは、.get(c)でしようとしている値でキーを取得するようには設計されていません。これは、指定されたキーの値を取得するように設計されています。

効率的なルックアップが必要な場合は、データ構造を変更する必要があります。

それ以外の場合は、Mapのエントリを反復処理して、要求された値を持つキー(複数のキーが存在する可能性があります)を探し出す必要があります。例えば

:あなたは_character_を持っており、それのために_integer_値を取得したい場合

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

関連する問題