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
'Backend > Java' 카테고리의 다른 글
[JAVA]Map에서 key값이 소문자로 변환되어 들어가는 현상과 해결 (0) | 2024.01.11 |
---|---|
[JAVA]오버로딩(overloading)과 오버라이딩(overriding) (0) | 2024.01.05 |