2016-10-30 3 views
0

내가이 변수가 값. 계속하려면 어떻게해야합니까?해시 맵을 중첩하기

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')); 
    } 
} 

내가 인쇄 할 :

나는 이미 시도했다 ... 나는 정상 HashMap의 변수에서 값을 가져 오는 방법을 알고 있지만 내가 중첩 된 해시 맵으로 작업을 수행하는 방법을 모른다 7하지만이 인쇄물은 나에게 널 준다.

업데이트 :이 문제를 해결하는 가장 좋은 방법은 구조를 변경하는 것입니다. HashMap은 값에서 인덱스를 가져 오도록 설계되지 않았습니다. 그러나 방법이 있습니다 (아래를보십시오).

+1

당신이 _character_을 가지고 대신'왜'지도 <문자, 정수>를 가지고 있지, 그것을 위해 _integer_ 값을 검색 할 경우 '지도 <정수, 문자> : 예를 들어

'? – 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

관련 문제