JAVA를 JAVA라

[JAVA] ArrayList<ArrayList<Integer>>에 값 넣기 (2차원 배열 list 버전) 본문

JAVA/풀어봅시다 (eclipse)

[JAVA] ArrayList<ArrayList<Integer>>에 값 넣기 (2차원 배열 list 버전)

샛별KIM 2021. 6. 11. 15:44
ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> innerList = new ArrayList<Integer>();

int cnt = 1;
for(int i = 0; i < 3; i++) {
	for(int j = 0; j < 3; j++) {
		innerList.add(cnt);
		cnt++;
	}
	list.add(innerList); //이렇게 하면 innerList의 주소값을 list에 추가!!
//	innerList.clear(); //이렇게 하면 저장됐던 자리의 1 2 3이 삭제된다...
	innerList = new ArrayList<Integer>(); //새 객체 생성!! 새 주소값 생성
}

/*
 * innerList의 주소값이 123번지라면,
 * list.add(innerList) 실행 시 list에 111번지가 연결된다.
 * 다음에 innerList를 변경하면 위의 111번지가 변경되므로
 * 다같이 변경... [[7, 8, 9], [7, 8, 9], [7, 8, 9]] 가 된다..
 * 이것을 막기 위해 new ArrayList<E>() 로 새 객체 생성,
 * 즉 새 주소값을 생성하여 list에 넣어준다.
 * 그러면 [[111번지], [새 생성된 112번지], [새 생성된 113번지]]
 * 가 연결된다! ([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
 */

 

for(ArrayList<Integer> is : list) {
	System.out.println(is);
}

//////출력

[1, 2, 3]
[4, 5, 6]
[7, 8, 9]

Comments