본문 바로가기
Backend/Java

[Java]List에 Map을 add할 때 같은 값이 반복되어 들어가는 현상

by kkaboo 2023. 11. 10.
728x90

이 현상을 해결하기 위해 결론부터 말하자면 map.clear(); 대신에 map = new HashMap(); 을 써주면 된다

 

같은 값이 반복되어 들어가는 코드

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

class listLoop{
	public static void main(String[] args){
        Map map = new HashMap();
        List list = new ArrayList();
        for (int i = 0; i < 5; i ++) {
            // 이 부분을
            map.clear();
            map.put("안녕하세요" + i, "" + i);
            list.add(map);
        }
        System.out.println(list);
	}
}

 

결과

수정된 코드

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

class listLoop{
	public static void main(String[] args){
        Map map = new HashMap();
        List list = new ArrayList();
        for (int i = 0; i < 5; i ++) {
            // 이렇게 변경
            map = new HashMap();
            map.put("안녕하세요" + i, "" + i);
            list.add(map);
        }
        System.out.println(list);
	}
}

결과

 

map.clear();의 경우 Map의 메모리 값은 그대로인 채로 값만 변경 된다.

map = new HashMap(); 를 통해 메모리 주소를 새로 생성해주어야 원하는 값이 출력된다.

 

그렇다고 매번 객체를 재생성 하게 되면 그만큼의 메모리 공간을 사용하게 되므로 서로 다른 param값을 던져주는 등의 상황에서는 new를 통한 객체 재생성보다 clear()를 사용한다.

 

 

 

 

728x90