728x90

    럭키-[이모티콘]어밴드


    Map<String,String>을 다른 Map의 키값으로 사용한다면.


    안녕하세요. 천상나타입니다.

    이번 포스팅은 말 그대로 map을 다른 map의 

    키값으로 사용한다면 생기는 일에 대해 정리해보겠습니다.

    말로만 설명한다면 이해가 가지 않으므로

    밑의 자바 코딩을 적어놓았습니다. 

    (밑의 링크는 웹에서 자바코딩할 수 있는 곳이 있어 공유합니다.)

    자바 테스트 코딩하기.


    public class TEST {
    	
    	public static void main(String[] args) {
    	    HashMap< HashMap , Integer > idxHash = new HashMap< HashMap, Integer > ();
     
                HashMap tempMap = new HashMap();
     
                ArrayList mid = new ArrayList();
                ArrayList rid = new ArrayList();
     
                rid.add("1"); rid.add("1"); rid.add("2"); rid.add("3"); rid.add("1"); //;
                mid.add("1"); mid.add("2"); mid.add("1"); mid.add("1"); mid.add("2"); //;
     
     
                int i= 0;
                while(i < 5) {
     
                  tempMap.put(rid.get(i), mid.get(i));
                  System.out.println("tempMap : "+tempMap);
                  if(idxHash.get(tempMap) == null) {
                   idxHash.put(tempMap, 1);
                   System.out.println("null : 1");
                  } else {
                   int org_value = idxHash.get(tempMap);
                   int increase = org_value+1;
                   idxHash.put(tempMap,increase);
                   System.out.println("add : " + increase);
                    }
                  i++;
                }
    	}
    	
    }
    


    위와 같은 코드가 있다.

    코드를 잘보시면 반복문 내부에서 

    tempMap이라는 맵 참조 변수에 mid, rid이라는 ArrayList에서 가져온 String을

    순차적으로 key, value로 put하고 있는 부분이 보입니다.

    그리고 idxHash라는 HashMap에서는 

    HashMap<String, String> 타입을 키값으로 사용합니다.

    그리고 반복문 내부에서 tempMap 참조변수를

    if절을 통해 tempMap이라는 키값을 있는지 물어본 후 null이라면

    idxHash에 tempMap을 키값으로 put 하고 INT형 데이터를 value에 넣었습니다.

    그리고 해당 키값이 null이 아니라면 interger value에 1을 더하는 로직입니다.

    처음에 이와 같은 코드를 보았을 때에는

    결과에 대해

    tempMap이 참조변수이므로 주소값이 키값으로 들어갔다고 예상했고

    integer Value는 5가 찍힐 것이라고 예상했습니다.


    위의 코드 결과값 도출

    tempMap : {1=1}

    null : 1

    tempMap : {1=2}

    null : 1

    tempMap : {1=2, 2=1}

    null : 1

    tempMap : {1=2, 2=1, 3=1}

    null : 1

    tempMap : {1=2, 2=1, 3=1}

    add : 2

    결과값이 도출되었을때 null일 경우가 1번으로 예상했지만

    위와 같이 null값이 4번 일어나고 마지막에 int값이 increase가 되는 것을 확인했습니다.

    처음엔 결과값이 예상과는 다르게 나와 당황했습니다.

    그리고 idxHash에는 위와같이 "1=1"이

    tempMap의 "key=value"

    그대로 key값으로 들어간다는 것을 알 수 있었습니다.


    혹시 저와 같이 혼란스러우실 수 있으실것 같아

    위와 같이 코드를 공유합니다.


    Posted by 천상나타