Step-by-Step
ArrayList 주의할 점 - Reference(주소 값) 본문
ArrayList에 추가를 하면 객체의 값이 저장되는게 아니라 주소 값을 저장하게 된다
예제를 통해 설명하면
import java.util.*;
public class Solution{
public static void main(String[] args){
ArrayList<ArrayList<Integer>> arrays = new ArrayList<>();
ArrayList<Integer> arr = new ArrayList<>();
for(int i=0; i<5; i++) {
arr.add(i);
}
arrays.add(arr);
System.out.println(arrays);
arr.clear();
for(int i=0; i<3; i++) {
arr.add(i);
}
arrays.add(arr);
System.out.println(arrays);
}
}
다음 코드에서 예상했던 출력 값은 다음과 같았다
[0,1,2,3,4]
[[0,1,2,3,4],[0,1,2]]
하지만 실제 출력값은
이렇게 나온다! 첫 번째와 두 번째 모두 ArrayList로 만든 arr의 값을 참조하고 있기 때문에,
기존에 넣어뒀던 인덱스 0번째의 값도 변경된다!
따라서 ArrayList에 값을 넣을 때는, new로 새로 생성자를 만들어 넣어줘야 한다!
후보키 문제에서 너무 골치아파서 찾아보니까 이런 원리 때문이었고,,
JAVA 복습할 때 공부했던 기억도 되살아났다..! 역시 꾸준히 복습하는게 답인가 보다ㅎㅎ
[참조]
https://velog.io/@ruinak_4127/Chapter-7-%EB%B0%B0%EC%97%B4%EA%B3%BC-ArrayList
'언어 > JAVA' 카테고리의 다른 글
[JAVA] 배열 복사 - 얕은 복사와 깊은 복사 (0) | 2022.02.09 |
---|---|
[JAVA] 백준 - 미로 탐색 [2178] (feat. DFS의 문제점) (0) | 2022.02.03 |
[JAVA] 프로그래머스 - 후보키 (feat. 이틀..) (0) | 2022.01.28 |
[JAVA] 프로그래머스 - 수식최대화 (0) | 2022.01.24 |
[JAVA] 프로그래머스 - 순위검색 (0) | 2022.01.11 |
Comments