배열(Array)이란?
동일한 타입의 값들을 하나의 묶음으로 묶은 자료 구조를 의미한다. 즉, 값들이 같은 의미를 지니면서 서로 연관성이 있을 때, 이들을 하나의 덩어리로 묶을 수 있으며, 이렇게 묶인 값들의 집합을 배열이라고 한다.
배열이 가진 각 값들을 배열의 요소라고 한다. 그리고 배열의 각 요소는 0에서부터 시작하는 번호를 부여받는데, 이처럼 각 요소가 부여받는 순번을 인덱스(index)라고 한다.
예를 들어 길이가 31인 배열을 생성하면 맨 첫 번째 요소의 인덱스는 0이며, 두 번째 인덱스는 1, 마지막 31번째 요소의 인덱스는 30이 된다.
배열을 선언했을 경우 요소들은 타입에 맞게 자동으로 초기화된다.
배열의 타입 | 초기값 |
char | '\u0000' |
byte, short, int | 0 |
long | 0L |
float | 0.0F |
double | 0.0 또는 0.0D |
boolean | false |
배열, 인스턴스 등 | null |
1차원 배열
1차원 배열은 가장 일반적인 배열의 형태이다.
int[] result; // 배열을 가리킬 참조 변수 result 를 선언
result = new int[31];
int[] result = new int[31]; // 선언과 동시에 초기화
int[] result = new int[31] { 1, 2, 3, 4, .... 31 }; // 실제 값을 넣어서 초기화
int[] result = { 1, 2, 3, 4, .... 31 } // new int[] 생략 가능
값 접근하기
배열 내 특정 요소에 할당되어 있는 값에 접근하려면 배열 참조 변수의 이름과 배열의 인덱스를 활용한다.
double[] temperatureOfJuly = new double[31] { 27.4, 30.1, 31.1, 32.4, ..., 31.8 };
위와 같이 배열을 선언한 경우
- 첫 번째 요소는 temperatureOfJuly[0]으로 접근할 수 있으며 27.4이다.
- 두 번째 요소는 temperatureOfJuly[1]으로 접근할 수 있으며 30.1이다.
- 세 번째 요소는 temperatureOfJuly[2]으로 접근할 수 있으며 31.1이다.
- 마지막 요소는 temperatureOfJuly[30]으로 접근할 수 있으며 31.8이다.
배열의 길이
배열이 가진 요소의 개수를 배열의 길이 또는 크기라고 한다.
int[] result = new int[31];
배열참조변수이름.length
System.out.println(result.length); // 31
배열에서 인덱스는 0부터 시작하므로 배열의 길이가 31이라면 배열 마지막 요소의 인덱스는 30이 된다.
즉, 배열의 길이 -1이 배열 마지막 요소의 인덱스가 된다.
※ length 메서드 주의
int[] result = new int[31];
System.out.println(result.length); // 31 배열 길이에서는 length
String result = "Hello!";
System.out.println(result.length()); // 6 문자열 길이에서는 length()
※ 빈 배열을 출력하는 방법
return new int[] {};
배열 메서드
Arrays.toString()
배열의 내용을 문자열 타입으로 반환해준다. String 타입으로 리턴한다.
// Arrays.toString("String으로 변환하고 싶은 배열")
int[] result = {1, 2, 3};
System.out.println(result.toString()); // 주소값 출력
System.out.println(Arrays.toString(result)); // [1, 2, 3] 출력
String.split()
어떤 문자 기준으로 문자열을 자르고 배열로 리턴한다.
// 문자열이름.split(" 기준 ", 배열의 길이)
String str = "Hi guys This is split example";
String[] result = str.split(" ");
String[] result2 = str.split(" ", 2);
String[] result3 = str.split(" ", 3);
System.out.println(Arrays.toString(result)); // [Hi, guys, This, is, split, example]
System.out.println(Arrays.toString(result2)); // [Hi, guys This is split example]
System.out.println(Arrays.toString(result3)); // [Hi, guys, This is split example]
// 일반 문자로 잘랐을 때
String str = "This island is beautiful";
String[] result = str.split("is");
System.out.println(Arrays.toString(result)); // [Th, , land , beautiful]
System.arraycopy()
배열 복사하기
// System.arraycopy(arr1, 0, arr2, 0, arr.length);
// -> arr1의 0번 인덱스부터 arr.length개 만큼의 요소를 arr2의 0번 인덱스부터 붙여넣어라
int[] arr1 = {10, 20, 30, 40, 50};
int[] arr2= {1, 2, 3, 4, 5};
System.arraycopy(arr1, 0, arr2, 1, 3); // result -> {1 10 20 30 5}
Arrays.copyOf()
배열 복사하기
// Arrays.copyOf(원본배열, 복사할 길이);
int[] arr1 = {1, 2, 3, 4, 5};
int[] arr2 = Arrays.copyOf(arr1, 3); // arr2 = {1, 2, 3}
Arrays.copyOfRange()
배열 복사하기
// Arrays.copyOfRange(원본 배열, 복사할 시작인덱스, 복사할 끝인덱스);
int[] arr1 = {1, 2, 3, 4, 5};
int[] arr2 = Arrays.copyOfRange(arr1, 3, 4); // arr2 = {4}
2차원 배열
배열의 각 요소가 또 다른 배열인 구조일 뿐, 1차원 배열과 크게 다른 점은 없다.
int[][] result;
result = new int[31][3];
int[][] result = new int[31][3];
// 이 코드가 실행되면
{
{ 0, 0, 0 },
{ 0, 0, 0 },
{ 0, 0, 0 },
...
{ 0, 0, 0 }
}
값을 넣어 초기화하는 경우
int[][] result = new int[][] {
{ 1, 2, 3 },
{ 4, 5, 6,},
{ 7, 8, 9 },
{ 10, 11, 12},
...
{ 29, 30, 31 }
}
// new int[][] 를 생략 가능
int[][] result = {
{ 1, 2, 3 },
{ 4, 5, 6,},
{ 7, 8, 9 },
{ 10, 11, 12},
...
{ 29, 30, 31 }
}
가변 배열
배열이 2차원 이상일 때, 마지막 차수에 해당하는 배열의 길이를 고정하지 않아도 되며, 이러한 배열을 가변 배열이라고 한다.
int[][] result = new int[5][];
System.out.println("Arrays.toString(result) = " + Arrays.toString(result));
// 결과 Arrays.toString(result) = [null, null, null, null, null]
선언과 동시에 초기화
int[][] ages = {
{ 30, 32, 39, 59, 23 },
{ 31, 41, 52, 56, 72, 13 },
{ 45, 32, 84, 23, 13, 42, 55 },
{ 23, 41, 62, 64, 23, 51, 67, 98 },
{ 13, 14, 17, 84, 52, 37, 68, 66, 33 }
};
배열 탐색
반복문을 활용하여 배열을 탐색할 수 있으며, 기본적으로 인덱스와 배열의 크기(length)를 활용하여 탐색한다.
// for문
int[] result = { 1, 2, 3, 4 };
int sum = 0;
for (int index = 0; index < result.length; index ++) {
sum += result[index];
}
// while문
int[] result = { 1, 2, 3, 4 };
int sum = 0;
int index = 0;
while (index < result.length) {
sum += result[index++];
}
// for each문
int[] result = { 1, 2, 3, 4 };
int sum = 0;
for (int score: result) {
sum += score;
}
※ for - each문은 배열을 순회하면서 배열의 값을 수정할 수 없고 탐색만 가능하다.
'Language > Java' 카테고리의 다른 글
[Java] Getter, Setter 메서드 정리 (1) | 2022.10.11 |
---|---|
[Java / 자료구조] Deque 개념 및 정리 (1) | 2022.10.10 |
[Java] BufferedReader와 BufferedWriter 정리 (1) | 2022.10.01 |
[Java] 열거형 (enum) 정리 (1) | 2022.09.29 |
[Java] 재귀 함수 (Recursion Function) 정리 (1) | 2022.09.29 |