만족은 하되 안주하지는 말자

기록해야 기억한다

프로그래밍/JAVA

List 2차원 배열 만들기 (Array of ArrayList, 2d array with ArrayList)

D36choi 2022. 2. 10. 19:58
728x90

코테를 풀다보면 당연히 2차원 배열 형태의 저장공간이 필요할 때가 있고 (내가 그랬고)

이 때, 배열의 각 인덱스 공간이 동적인 사이즈를 가진 배열을 원할 때가 있을 수 있다.

 

이 때, 배열의 각 행은 고정, 열크기가 가변적인 Array of List 형태를 만들면 해결될 거다.

 

만약 여러 개의 줄에 서 있는 사람들의 키를 저장하고 출력하는 프로그램이 있다고 하면, 줄의 길이는 정해져 있지 않으므로

정적배열이 아닌 가변길이의 리스트로 진행해야 할 것이다.

import java.util.*;
public class Arraylist {
    public static void main(String[] args)
    {
        int n = 5;
  
  		// 변수 정의 선언
        ArrayList<Integer>[] al = new ArrayList[n];
  
        // 각 행에 ArrayList 객체를 할당
        for (int i = 0; i < n; i++) {
            al[i] = new ArrayList<Integer>();
        }
  
		// n번째 줄에 선 사람들의 키를 저장한다고 치면..
        al[0].add(170);
        al[0].add(165);
        al[1].add(182);
        al[2].add(193);
        al[2].add(155);
        al[2].add(172);
        al[3].add(162);
        al[4].add(120);
        al[4].add(150);
  
        for (int i = 0; i < n; i++) {
        	List<Integer> line = al[i];
            System.out.print((i+1) + "th line : ");
            for (int j = 0; j < line.size(); j++) {
            	System.out.print(line.get(j) + "cm ");
            }
            System.out.println();
        }
    }
}

 

ArrayList<Integer>[] al = new ArrayList[n];

dataType이 ArrayList<Integer>인 array 형태로 메모리를 할당한다.

 

for (int i = 0; i < n; i++) { al[i] = new ArrayList<Integer>(); }

그 후, 각 행을 순회하며 행마다 동적인 리스트 객체를 할당한다.

이로써 각 행에선 가변길이를 가질 수 있는 리스트를 참조할 수 있다.

output