Java

배열(Array)

레이코딩 2022. 9. 21. 09:12

출처 - Java의 정석 기초편 (남궁 성)

 

 

1. 배열이란?

- 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것

- 각 저장공간이 연속적으로 배치

- 배열의 요소: 생성된 배열의 각 저장공간, 배열이름[인덱스]

- 배열의 인덱스: 배열의 요소마다 붙여진 일련번호, 인덱스의 범위는 0부터 배열길이-1

 

타입[] 변수이름; // 배열의 선언 (배열을 다루기 위한 참조변수 선언)
변수이름 = new 타입[길이]; // 배열의 생성 (실제 저장공간을 생성)

타입[] 변수이름 = new 타입[길이]; // 배열의 선언과 생성을 동시에
int[] score = new int[5]; // 길이가 5인 int 배열

 

 

2. 배열의 길이

- 배열은 한번 생성하면 실행동안 길이 변경 불가

- 배열이름.length 는 상수 (변경에 유리한 코드)

int[] score = new int[5]

for (int i=0; i<score.length; i++)
	System.out.println(score[i]);

 

 

3. 배열의 초기화, 출력

- 배열은 생성과 동시에 기본값(0)으로 자동 초기화

- 원하는 값 저장하려면 각 요소마다 값 지정

- 배열의 길이가 큰 경우 초기화, 출력 모두 for문 가능

- Arrays.toString(배열이름) 메서드 사용, import문 추가

 

int[] score = new int[]{50, 60, 70, 80, 90};
int[] score = {50, 60, 70, 80, 90}; // new int[] 생략 가능

int[] iArr = {100, 98, 80, 70, 60};
	System.out.println(Arrays.tostring(iArr)); // [100, 95, 80, 70, 60]
	System.out.println(iArr); // [I@14318BB 와 같은 문자열 출력

 

 

4. 배열의 활용

- 총합과 평균

- for문, 배열의 길이, 형변환

int sum = 0;
float average = 0f;

int[] score = {100, 88, 100, 100, 90};

for (int i=0; i < score.length; i++) {
	sum += score[i]
}
average = sum / (float)score.length;

 

 

- 최대값과 최소값

- 배열의 첫 번째 값으로 최대값, 최소값 초기화

 

int [] score = {79, 88, 91, 33, 100, 55, 95};

int max = score[0];
int min = score[0];

for (int i=1; i < score.length; i++) {
	if(score[i] > max) {
    	max = score[i];
    } else if (score[i] < min) {
    	min = score[i];
    }
}

 

 

- 섞기(shuffle)

- 배열의 첫 번째 값과 임의의 위치 값과 교환

 

int [] numArr = {0,1,2,3,4,5,6,7,8,9};

for (int i=0; i < 100; i++) {
	int n = (int)(Math.random()*10);
    int tmp = numArr[0];
    numArr[0] = numArr[n];
    numArr[n] = tmp;
}

System.out.println(Arrays.toString(numArr));

 

 

5. String배열

- 참조형 변수의 기본값 null 로 각 요소의 값 초기화

 

String[] name = new String[] { "Kim", "Park", "Yi" };
String[] name = { "Kim", "Park", "Yi" }; // new String[] 생략 가능

 

 

6. 2차원 배열

- 테이블 형태의 데이터를 담는데 사용

- 행과 열로 구성

- 2차원 배열의 각 요소 접근: 배열이름[행index][열index]

 

타입[][] 변수이름; // 2차원 배열의 선언

int[][] score = new int[4][3] // 4행 3열의 2차원 배열 생성
score[0][0] score[0][1] score[0][2]
score[1][0] score[1][1] score[1][2]
score[2][0] score[2][1] score[2][2]
score[3][0] score[3][1] score[3][2]

 

 

7. 2차원 배열의 초기화

 

int[][] arr = { {1, 2, 3}, {4, 5, 6} }; // new int[][] 생략 됨

int[][] arr = {
		{1, 2, 3},
		{4, 5, 6}
              };

for (int i=0; i < score.length; i++) {
	for (int j=0; j < score[i].length; j++) {
    	System.out.println("score[%d][%d]=%d%n", i, j, score[i][j]);
    } 
}

 

 

8. Arrays 클래스(Arranys.배열 메서드)

- 비교: equals(), deepequals()

- 출력: toString(), deepToString()

- 복사: copyOf(), copyOfRange(arr, from, to(불포함))

- 정렬: sort()