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
반응형
'JAVA' 카테고리의 다른 글
[JAVA] XML 데이터를 String으로 변환하는 방법 / XML to String (0) | 2022.09.11 |
---|---|
[JAVA] API 서버통신을 통해 받아온 XML형식의 데이터를 문자열(String)으로 변환하는 방법 (0) | 2022.09.11 |
[JAVA] 자바에서 폴더 및 파일 생성시 접근권한 설정 해주는 방법 ( Runtime.getRuntime() ) (0) | 2022.07.19 |
[JAVA] 자바에서 서버통신을 통해 공공데이터포털에서 데이터를 가져오는 방법 (1) :: ( GET방식, HttpURLConnection ) (0) | 2022.07.12 |
[JAVA] 자바에서 XML데이터를 JSON형태로 변환해보자. ( 자바 XML to JSON ) (2) | 2022.07.11 |