JAVA
[JAVA] 자바 List객체에 add할 때, 전부 마지막 값으로 add 되는 현상 해결방법
모찌바라기
2022. 9. 11. 03:30
728x90
반응형
자바를 오랜만에 하다보니, 나도 모르게 생성자를 한번만 만들고 add를 해서
마지막 값만 추가되는 현상이 발생한 김에 정리해본다.
틀린코드
ArrayList<Object> list = new ArrayList<Object>();
HashMap<String, Integer> obj = new HashMap<String, Integer>();
for(int i=1; i<=5; i++) {
obj.put("테스트값 : "+i, i);
list.add(obj);
}
System.out.println(list);
/** 결과값
* [{테스트값 : 4=4, 테스트값 : 5=5, 테스트값 : 2=2, 테스트값 : 3=3, 테스트값 : 1=1},
* {테스트값 : 4=4, 테스트값 : 5=5, 테스트값 : 2=2, 테스트값 : 3=3, 테스트값 : 1=1},
* {테스트값 : 4=4, 테스트값 : 5=5, 테스트값 : 2=2, 테스트값 : 3=3, 테스트값 : 1=1},
* {테스트값 : 4=4, 테스트값 : 5=5, 테스트값 : 2=2, 테스트값 : 3=3, 테스트값 : 1=1},
* {테스트값 : 4=4, 테스트값 : 5=5, 테스트값 : 2=2, 테스트값 : 3=3, 테스트값 : 1=1}]
*/
올바른코드
public static void main(String[] args) {
ArrayList<Object> list = new ArrayList<Object>();
HashMap<String, Integer> obj = new HashMap<String, Integer>();
for(int i=1; i<=5; i++) {
/** 반복문을 수행할 때, 생성자로 초기화 해줘야 한다. */
obj = new HashMap<String, Integer>();
obj.put("테스트값 : "+i, i);
list.add(obj);
}
System.out.println(list);
}
/**
* 결과
* [{테스트값 : 1=1}, {테스트값 : 2=2}, {테스트값 : 3=3}, {테스트값 : 4=4}, {테스트값 : 5=5}]
*/
for문으로 반복문을 돌릴 때, 반드시 new를 통하여 생성자를 초기화 해주어야 한다.
그렇지 않으면 같은 값이 중복으로 들어간다. 기초적인거라도 안쓰다 보면 잘 까먹는 것 같다..
728x90
반응형