본문 바로가기
Java/Basic

2차원 배열, Arrays클래스

by 최로이 2021. 2. 25.

3.1 2차원 배열의 선언과 인덱스(index), 초기화

2차원 배열의 선언은 1차원 배열과 같다. 다만 괄호[]가 하나 더 늘었다는 것.

① 선언, 생성, 초기화를 동시에
int[][] score = {

                              {1, 2, 3},
                              {4, 5, 6},
                              {7, 8, 9},
                              {10, 11, 12},
                           };


② 선언과 생성

int[][] score = new int[4][3]; //4행 3열짜리 2차원 배열을 생성한다. 단 생성은 했으나 초기화는 하지 않은 상태.

2차원 배열은 잘 살펴보면 행(row)과 열(column)로 구성되어 있다. 그림을 살펴보면 다음과 같다

 

[4][3]의 2차원배열의 초기화

 

[4][3]의 2차원배열의 index.length

 

2차원 배열의 메모리 구조

 

new int[4][3]의 2차원 배열의 객체를 생성하여 초기화 시키면 위 그림과 같다. 

그리고 만약 이러한 2차원 배열의 형태를 for문을 이용하여 초기화 할 땐 다음과 같은 형태로 초기화 한다(거의 모든 2차원 배열의for문 초기화는 형태가 비슷하니 공식처럼 알아주면 좋다)

for(int i=0; i<score.length; i++){
  for(int j = 0; j<score[i].length; j++){
    score[i][j] = n;
  }
}
//2차원 배열 score의 모든 요소를 n으로 초기화한다.

3.2 가변 배열의 선언과 초기화

1) 가변 배열의 선언방법

int[][] score = new int[4][3] //기존의 배열생성 방법: 생성된 모든 배열의 길이가 동일.
int[][] score = new int[4][];  //가변 배열 생성: 생선된 배열의 길이가 각각 다르다.
score[0] = new int[4];
score[1] = new int[3];
score[2] = new int[2];
score[3] = new int[3];

 

2차원 배열의 가변배열 선언 및 생성

2) 가변 배열의 생성과 초기화(위 그림)

int[][] score = {
                              {1, 2, 3, 4},
                              {5, 6, 7},
                              
{8, 9},
                              
{10, 11, 12},
                             
};

score.length의 값은 4지만 score[i].length의 값은 서로 다르다는 것을 볼 수 있다.

 

4.1 Arrays클래스

1) 문자열의 비교와 출력 - equals(), toString()

public class arrays {

	public static void main(String[] args) {
		int[] arr = {0,1,2,3,4};
		int[][] arr2D = {{11, 12}, {21, 22}};
		
		//toString(): 1차원 배열의 값을 String 타입으로 출력
		//deepToString(): 2차원 배열의 값을 String 타입으로 출력
		System.out.println(Arrays.toString(arr));
		System.out.println(Arrays.deepToString(arr2D));
		
		System.out.println("---------------------");
		
		String[][] str2D = {{"aaa","bbb"},{"AAA","BBB"}};
		String[][] str2D2 = {{"aaa","bbb"},{"AAA","BBB"}};
		
		//Arrays.equals(): 1차원 배열의 문자열을 비교하여 값을 반환
		//Arrays.deepEquals(): 2차원 배열의 문자열을 비교하여 값을 반환
		System.out.println(Arrays.equals(str2D, str2D2));	//2차원 배열이기 때문에 false
		System.out.println(Arrays.deepEquals(str2D, str2D2));	//2차원 배열의 값이 같아서 true
	}

}

2) 배열의 복사 - copyOf(), copyOfRange()

		//copyOf(var, index.length): 해당 배열 변수의 요수갯수를 출력
		//copyOfRange(var, index1, index2): 배열변수의 index1부터 index2미만의 범위의 값 출력
		int[] arr = {0,1,2,3,4};
		int[] arr2 = Arrays.copyOf(arr, arr.length);
		int[] arr3 = Arrays.copyOf(arr ,3);
		int[] arr4 = Arrays.copyOf(arr, 7); //범위를 초과하면 0으로 출력
		int[] arr5 = Arrays.copyOfRange(arr, 2, 4);
		int[] arr6 = Arrays.copyOfRange(arr, 2, 7); //범위를 초과하면 0으로 출력
		
		System.out.println(Arrays.toString(arr));
		System.out.println(Arrays.toString(arr2));
		System.out.println(Arrays.toString(arr3));
		System.out.println(Arrays.toString(arr4));
		System.out.println(Arrays.toString(arr5));
		System.out.println(Arrays.toString(arr6));
        ------------------------------------------
        [실행 결과]
        [0, 1, 2, 3, 4]
        [0, 1, 2, 3, 4]
        [0, 1, 2]
        [0, 1, 2, 3, 4, 0, 0]
        [2, 3]
        [2, 3, 4, 0, 0]

'Java > Basic' 카테고리의 다른 글

JVM의 메모리 구조  (0) 2021.03.19
객체지향  (0) 2021.03.03
String 배열  (0) 2021.02.23
배열(Array)  (0) 2021.02.21
반복문(for, while, do-while)  (0) 2021.02.20

댓글