개발공작소
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
반응형
profile

개발공작소

@모찌바라기

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!