어제 오늘 내일

[Java] ArrayList로 2차원 배열 만들기, 활용하기 본문

IT/Java

[Java] ArrayList로 2차원 배열 만들기, 활용하기

hi.anna 2025. 8. 23. 00:20

 

 

자바(Java)에서 데이터를 저장할 때 ArrayList는 많이 사용하는 컬렉션 클래스입니다.
그런데 가끔은 **2차원 배열(행렬처럼 행과 열이 있는 구조)**을 만들어야 할 때가 있습니다.

예를 들어,

  • 학생별 과목 점수를 저장할 때
  • 게시판 글과 댓글을 계층적으로 저장할 때
  • 좌표나 매트릭스 구조를 다룰 때

이번 글에서는 ArrayList로 2차원 배열처럼 다루는 방법을 정리해 보겠습니다.

 


 

1. ArrayList 안에 ArrayList 넣기

자바에서 ArrayList는 기본적으로 1차원 구조입니다.
하지만 ArrayList 안에 또 다른 ArrayList를 넣으면, 마치 2차원 배열처럼 사용할 수 있습니다.

import java.util.*;

public class TwoDArrayListExample1 {
    public static void main(String[] args) {
        // 2차원 ArrayList 선언
        ArrayList<ArrayList<Integer>> matrix = new ArrayList<>();

        // 첫 번째 행
        ArrayList<Integer> row1 = new ArrayList<>();
        row1.add(1);
        row1.add(2);
        row1.add(3);

        // 두 번째 행
        ArrayList<Integer> row2 = new ArrayList<>();
        row2.add(4);
        row2.add(5);
        row2.add(6);

        // 행들을 matrix에 추가
        matrix.add(row1);
        matrix.add(row2);

        // 출력
        System.out.println(matrix);
    }
}

실행 결과

[[1, 2, 3], [4, 5, 6]]

👉 matrix.get(0) → [1, 2, 3]
👉 matrix.get(1).get(2) → 6

즉, 행렬 구조처럼 접근 가능합니다.

 


 

2. for문으로 초기화하기

위처럼 일일이 만들 수도 있지만, 보통은 for문을 활용해서 초기화합니다.

import java.util.*;

public class TwoDArrayListExample2 {
    public static void main(String[] args) {
        int rows = 3;
        int cols = 4;

        ArrayList<ArrayList<Integer>> matrix = new ArrayList<>();

        // 3행 4열 초기화 (모두 0으로)
        for (int i = 0; i < rows; i++) {
            ArrayList<Integer> row = new ArrayList<>();
            for (int j = 0; j < cols; j++) {
                row.add(0);
            }
            matrix.add(row);
        }

        System.out.println(matrix);
    }
}

실행 결과

[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

👉 마치 int[3][4] 같은 2차원 배열을 ArrayList로 만든 것과 동일합니다.

 


 

3. 값 수정 및 접근

ArrayList의 특징은 크기가 유동적이라는 점입니다.
즉, 특정 값을 바꾸거나 행을 늘리거나 줄이는 것이 가능합니다.

import java.util.*;

public class TwoDArrayListExample3 {
    public static void main(String[] args) {
        ArrayList<ArrayList<Integer>> matrix = new ArrayList<>();

        // 2행 2열 초기화
        for (int i = 0; i < 2; i++) {
            ArrayList<Integer> row = new ArrayList<>();
            for (int j = 0; j < 2; j++) {
                row.add(0);
            }
            matrix.add(row);
        }

        // 값 수정
        matrix.get(0).set(1, 10); // 0행 1열 값을 10으로 변경
        matrix.get(1).set(0, 20); // 1행 0열 값을 20으로 변경

        System.out.println(matrix);
    }
}

실행 결과

[[0, 10], [20, 0]]

👉 set() 메서드로 원하는 위치의 값을 쉽게 변경할 수 있습니다.

 


 

4. 문자열 2차원 ArrayList

숫자뿐 아니라 문자열도 당연히 가능합니다.

import java.util.*;

public class TwoDArrayListExample4 {
    public static void main(String[] args) {
        ArrayList<ArrayList<String>> names = new ArrayList<>();

        ArrayList<String> row1 = new ArrayList<>(Arrays.asList("홍길동", "김철수"));
        ArrayList<String> row2 = new ArrayList<>(Arrays.asList("이영희", "박영수"));

        names.add(row1);
        names.add(row2);

        System.out.println(names);
    }
}

실행 결과

[[홍길동, 김철수], [이영희, 박영수]]

 

 


 

5. 정리

  • ArrayList<ArrayList<T>> 형태로 선언하면 2차원 구조 가능
  • add()로 행과 열을 자유롭게 추가
  • get(i).get(j)로 값 접근
  • set(i, j, value)로 값 수정 가능
  • 일반 배열보다 크기 조절이 자유로움

 

 

반응형
Comments