배열(Array)
출처 - 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()