- 프로그래링에서 정말 자주 쓰이는 자료형이다.
- 배열은 하나의 블록안에 여러 데이터들을 모아 집합시켜 저장하여 데이터를 구조적으로 다루는데 도와준다.
[ 용어 ]
- 배열요소(element) : 배열을 구성하는 각각의 값.
- 인덱스(index) : 배열에서의 위치를 가리키는 숫자.
[ 배열 선언과 초기화 ]
// int형 배열 선언 및 초기화
int[] score = new int[5]; // int타입의 값 5개가 저장될 빈 공간 생성
// 각각의 인덱스 값 초기화
score[0] = 10;
score[1] = 20;
score[2] = 20;
score[3] = 30;
score[4] = 40;
score[5] = 50;
// 한번에 묶어서 값 초기화
int[] score2 = {10, 20, 30, 40, 50};
// for문을 이용한 값 초기화
for(int i = 0; i < score.length; i++) {
number[i] = i * 10;
}
// String형 배열 선언 및 초기화
String[] student = new String[3];
// 각각의 인덱스 값 초기화
name[0] = "mallon";
name[1] = "mike";
name[2] = "dohyun";
- 배열을 선언할때 공간의 갯수(길이)를 지정해주어야 한다.
※ 이것은 곧 공간의 제약이 생겨 데이터를 저장하는데 애로사항이 있을 수 있다는 뜻이기도 하다.
- 이처럼 자바의 배열은 길이가 처음부터 지정되어있기 때문에 처음부터 지정하지 않는 경우 컴파일 에러가 발생한다.
- 배열의 타입도 지정해주어 배열에 들어올 수 있는 데이터의 자료형을 명시해 주어야 한다.
[ 배열접근(출력) ]
int arr {100, 200, 300, 400, 500};
System.out.println(arr);
- 이전 처럼 변수를 출력하듯이 출력하게 되면, 배열은 객체이기 때문에 참조변수의 주소가 출력된다.
- 따라서, for문을 이용하거나, 자바에서 제공해주는 Arrays.toString() 메서드를 이용하여 문자열 형식으로 출력할 수 있다.
★ Arrays Class
- Arrays 클래스는 java.util 패키기에 속해 있으며, 배열을 다루기 위한 다양한 메소드들이 구성되어 있다.
- Arrays 클래스의 모든 메소드는 static 메소드이므로, 따로 객체를 생성하지 않고도 바로 사용이 가능하다.
- 그러나, 해당 클래스를 사용하고자 한다면 반드시 패키지를 import를 해주어야 한다.
import java.util.Arrays;
class Method {
public static void main(String[] args) {
int[] arr = {100, 50, 30, 20, 10};
// 개별 값 출력
System.out.println(arr[0]);
System.out.println(arr[1]);
// 일반 for문을 이용한 출력 : 각각의 index를 같이 출력하고자 할때 사용.
for(int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
// 확장 for문을 이용한 출력 : 각각의 값만 출력하고자 할때 사용
for(int a : arr) {
System.out.println(m);
}
}
}
[ 배열 복사(Copy Array) ]
- 자바에서의 배열은 고정된 크기를 가진다.
- 배열이 선언되고 공간을 늘리고자하면 늘릴 수 없기 때문에 간접적인 방법으로 배열을 확장하여야 한다.
- 간접적으로 확장하는 방법은 따로 공간이 큰 배열을 만들어 주거나 기존의 배열의 내용을 새로 만든 배열을 복사하는 방법이 있다.
- 배열을 복사하는 방법은 for문을 이용해 복사하거나, 자바의 메소드를 이용하는 것이다.
// for문을 이용한 arr복사
public static void main(String[] args) {
int[] arr = {10, 20, 30, 40, 50}; // length : 5크기의 배열 생성
int[] arr2 = new int[arr.length * 2]; // arr의 두배 크기의 배열 생성.
// arr.length는 arr의 크기를 반환한다.
// for문을 이용하여 배열복사
for(int i = 0; i < arr.length; i++) {
arr2[i] = arr[i];
}
arr = arr2; // 기존 배열을 가리키고있던 참조변수 arr의 주소를 arr2의 주소로 변경
}
// System.arraycopy() 메서드 사용
public static void main(String[] args) {
int[] arr = {10, 20, 30, 40, 50}; // 길이 : 5개 짜리 배열 생성
int[] arr2 new int[arr.length * 2]; // arr의 크기의 두배짜리 배열 생성
// 배열복사
System.arraycopy(arr, 0, arr2, 0, arr.length);
/*
- 첫번째 인자 : 복사할 배열이름
- 두번째 인자 : 복사를 시작할 배열의 위치(인덱스)
- 세번째 인자 : 붙여넣을 배열이름
- 네번째 인자 : 복사된 배열값이 붙여질 위치(인덱스)
- 다섯번째 인자 : 복사할 길이
*/
// Arrays.copyOf() 메서드 사용
import java.util.Arrays();
public static void main(String[] args) {
int[] arr = {10, 20, 30, 40, 50}; // 길이 : 5개짜리 배열 생성
int[] arr2 = new int[arr.length * 2]; // arr의 두배 크기의 배열 생성
// 배열 복사
arr2 = Arrays.copyOf(arr, arr.length);
// 첫번째 인자 : 복사할 배열이름, 두번째 인자 : 복사할 배열의 길이
arr2 Arrays.copyOfRange(arr, 1, 3);
// 첫번째 인자 : 복사할 배열이름, 두번째 인자 : 복사 시작점, 세번째 인자 : 복사 종료지점
}
※ Arrays.copyOf은 System.arraycopy의 래퍼클래스이므로 동일한 함수이다.
- for문보다 메서드를 이용하면 두배정도 빠르게 복사할 수 있다.
[ 배열 정렬 ]
Arrays.Sort()
- 배열을 정렬할때의 주의사항은 정렬된 배열을 새로 만드는 것이 아닌, 자기 자신을 정렬하기 때문에, 배열의 구조가
변경 된다.
import java.util.Arrays;
public static void main(String[] args) {
int[] arr = {0, 3, 2, 1, 4};
// 오름차순 정렬
Arrays.sort(arr);
// toString()을 이용하여 배열을 출력할 수 있다.
System.out,println(Arrays.toString(arr)); // [0, 1, 2, 3, 4]
// 내림차순 정렬
Arrays.sort(arr, Collections.reverseOrder());
System.out,println(Arrays.toString(arr)); // [4, 3, 2, 1, 0]
// 배열의 일부만 정렬
Arrays.sort(arr, 0, 3); // index 0 ~ 2 까지 정렬
System.out,println(Arrays.toString(arr)); // [0, 2, 3, 1, 4]
}
[ 배열 비교 ]
Arrays.equals()
- 두 배열의 구성이 같은지 다른지 비교할 수 있는 메소드
import java.util.Arrays;
public static void main(String[] args) {
String[] arr = {"홍길동", "임꺽정", "박혁거세", "주몽", "고감"};
String[] arr2 = {"홍길동", "임꺽정", "박혁거세", "주몽", "고감"};
String[] arr3 = {"홍길동", "임꺽정", "박혁거세", "주몽"};
System.out.println(Arrays.equals(arr, arr2)); // true
System.out.println(Arrays.equals(arr2, arr3)); // false
}
'#Java' 카테고리의 다른 글
| String 문자열 (0) | 2024.04.08 |
|---|---|
| 다차원 배열 (0) | 2024.04.05 |
| 생성자(constructor) (0) | 2024.04.04 |
| Getter & Setter (0) | 2024.04.04 |
| 재귀함수(Recusion Function) (0) | 2024.04.04 |