BackEnd/Java

[Java] 동적가변배열 Dynamic Array

summer_light 2021. 7. 1. 17:02

동적가변배열

동적가변배열이 아닌 일반 배열은 처음부터 배열의 길이를 초기화해서 만들어 사용한다.

반면에 동적가변배열은 배열의 길이를 동적으로, 필요시에 생성한다.

즉, 동적가변배열은 필요시에 필요한 만큼 만들어서 사용하는 배열이다.

 

다음과 같이 []안을 비워두고 선언하여 동적가변배열을 생성할 수 있다. 

int[][] arr = new int[3][]

 

 


예제 01. 길이가 1씩 증가하는 동적가변배열 

package may31;

import java.util.Arrays;

public class DynamicArray {
	public static void main(String[] args) {
		
		int[] arr = new int[3];
		
		int[][] arr01 = new int[3][3];
		
		char[][] arr02 = new char[3][]; //내부를 비워두었을 때 - null
		for (char[] cs : arr02) {
			System.out.println(Arrays.toString(cs)); // null
		}
		
		arr02 = new char[3][0]; //내부에 0을 넣었을 때 - []
		for (char[] cs : arr02) {
			System.out.println(Arrays.toString(cs)); // [0]
		}
		
		for (int i = 0; i < arr02.length; i++) {
			arr02[i] = new char[i + 1]; // 행 번호만큼 방 만들기 
			
			for (int j = 0; j < arr02[i].length; j++) { // 방에는 A, B, C... 넣기
				arr02[i][j] = (char)(65 + i + j);
			}
		}
		
		for (char[] cs : arr02) {
			System.out.println(Arrays.toString(cs));
		}
		
	}

}

출력결과

null
null
null
[]
[]
[]
[A]
[B, C]
[C, D, E]

 

 

예제02. 랜덤한 길이의 동적가변배열

  • 5개의 집, 각 집에는 몇 개의 방이 있는 지는 정하지 않고 생성
  • 각각의 집을 돌며 1~5개 사이의 방을 만들어 주고 출력
package may31;

import java.util.Arrays;

//동적가변배열
public class DynamicArray02 {
	public static void main(String[] args) {
		
		//5개의 집, 각 집에는 몇 개의 방이 있는 지는 정하지 않았다. (동적가변배열)
		int[][] arr01 = new int[5][]; 
		
		//각 집을 돌면서 랜덤한 갯수로 방 만들어 주기
		for (int i = 0; i < arr01.length; i++) {
			arr01[i] = new int[(int)(Math.random() * 5 + 1)]; // 1 ~ 5 사이의 방 갯수(랜덤)
		}
		
		//출력
		for (int[] is : arr01) {
			System.out.println(Arrays.toString(is));
		}
	
	}
}