Java

HashMap 안의 HashMap

Lea_rlo 2022. 4. 12. 03:33
//외부 HashMap
HashMap mainMap = new HashMap();
        
//내부 HashMap 초기화 null
HashMap<String, Integer> subMap = null;
        
//mainMap에 String과 HashMap 저장
mainMap.put("가족", new HashMap());
        
//mainMap에서 key '가족'으로 value를 얻으면 HashMap
//mainMap이 참조하는 HashMap을 subMap이 참조함
subMap = (HashMap)mainMap.get("가족");
        
//subMap에서 값을 저장함
subMap.put("김두부", 28);
subMap.put("김숭늉", 24);
subMap.put("김벚꽃", 16);
        
//mainMap의 사이즈는 1
System.out.println(mainMap.size());
        
    //mainMap의 key로 접근하여 subMap에 접근하기 위한 코드
    Set set = mainMap.entrySet(); // entrySet() : 키와 값을 엔트리 형태로 Set에 저장하여 반환함
    Iterator iterator = set.iterator(); //Collection의 데이터에 접근하기 위해 Iterator 생성

    while (iterator.hasNext()) {        //Iterator 즉, 데이터가 있을 때까지 반복

        //next() : 다음 요소를 읽어온다. 
        //Object를 반환하기 때문에 Map.Entry(Map인터페이스의 내부 인터페이스)로 변환
        //Entry는 키와 값을 한 쌍으로 가지고 있어서 HashMap처럼 키와 값의 데이터를 가져올 수 있음
        Map.Entry me = (Map.Entry)iterator.next();
            
        //Map.Entry -> getValue() : 그 값을 얻어냄 그 값은 subMap이지만 Object를 반환함 
        //HashMap으로 변환한다. entrySet()메소드로 Set!
        Set subSet = ((HashMap) me.getValue()).entrySet();

        //subMap의 데이터에 접근하기 위해서 Iterator의 객체를 사용함
        Iterator subIterator = subSet.iterator();

        //subIterator가 데이터를 읽어올 수 있을 때까지 반복
        while (subIterator.hasNext()) {
            //next() : 다음 요소를 읽어온다. 
            //Object로 반환하기 때문에 Map.Entry(Map인터페이스의 내부 인터페이스)로 변환
            Map.Entry subMe = (Map.Entry)subIterator.next();
            
            //subMe의 참조변수로 Entry의 키와 값을 출력함
            System.out.println(subMe.getKey());
            System.out.println(subMe.getValue());
        }
    }