- 동일한 자료형의 데이터를 연속된 공간에 저장하기 위한 자료구조이다.
- 인덱스와 요소로 이루어져있으며 인덱스번호로 데이터에 접근이 가능하다.(index는 0부터 시작)
- 반복문 등을 이용하여 계산과 같은 과정을 쉽게 처리할 수 있다.
// 배열 생성
자료형[] 변수 = new 자료형[배열길이];
// 배열 선언과 동시에 초기화
자료형[] 변수 = {데이터1, 데이터2, 데이터3, ...};
자료형[] 변수 = new 자료형[]{데이터1, 데이터2, 데이터3, ...};
배열 생성
public class Main {
public static void main(String[] args) {
int[] intArr = new int[4];
System.out.println(intArr.length); // 4 -> 길이가 4인 배열이 생성됐다.
}
}
길이로 생성한 배열은 어떤 요소를 가지고 있을까?
public class Main {
public static void main(String[] args) {
int[] intArr = new int[4];
for (int i : intArr) {
System.out.println(i);
}
}
}
// 0
// 0
// 0
// 0 -> 요소가 모두 0이다.
타입별 초깃값
배열 선언과 동시에 초기화
public class Main {
public static void main(String[] args) {
int[] intArr = {1, 2, 3, 4};
int[] intArr2 = new int[]{1, 2, 3, 4};
}
}
두 방법의 차이는?
- 이미 선언된 배열을 초기화해야할 경우 new 키워드를 써야한다.
public class Main {
public static void main(String[] args) {
int[] intArr = {1, 2, 3, 4};
intArr = {5, 6, 7, 8}; // java: illegal start of expression 오류 발생
intArr = new int[]{5, 6, 7, 8}; // new 키워드를 사용해야 오류 없음
}
}
인덱스 접근
public class Main {
public static void main(String[] args) {
String[] strArr = new String[]{"a", "b", "c", "d"};
System.out.println(strArr[0]); // 변수[인덱스번호]로 데이터 접근
System.out.println(strArr[1]);
System.out.println(strArr[2]);
System.out.println(strArr[3]);
}
}
// a
// b
// c
// d
배열 복사하기
- 복사 방법엔 4가지 방법이 있다.
1. clone()
- 기존배열.clone()으로 간결하게 기존 배열을 복사할 수 있다.
int[] arr1 = new int[] {1, 2, 3, 4, 5};
int[] arr2 = arr1.clone();
2. Arrays.copyOf()
- 두 개의 인수를 받는다.
- Arrays.copyOf(기존배열, 새배열길이)
- 새 배열의 크기가 기존 배열보다 큰 경우 빈 인덱스는 0으로 체워진다.(int 기준)
int[] arr1 = {1, 2, 3, 4};
int[] arr2 = Arrays.copyOf(arr1, arr1.length);
3. System.arraycopy()
- 기존 배열의 특정 요소부터 복사할 수 있다.
- 새 배열의 특정 위치에서 복사를 시작할 수 있다.
- System.arraycopy(기존배열, 기존배열인덱스, 새배열, 새배열인덱스, 복사할요소개수)
String[] arr1 = new String[]{"A", "B", "C", "D", "E", "F", "G"};
String[] arr2 = new String[arr1.length];
// 1. "B" ~ "F" 까지 복사해보자
System.arraycopy(arr1, 1, arr2, 0, 5);
for (int i = 0; i < arr2.length; i++) {
System.out.printf("arr2[%d] : %s \n", i, arr2[i]);
}
// arr2[0] : B
// arr2[1] : C
// arr2[2] : D
// arr2[3] : E
// arr2[4] : F
// arr2[5] : null
// arr2[6] : null
// 2. "B" ~ "F" 위치까지 일치하게 복사하기
System.arraycopy(arr1, 1, arr2, 1, 5); // 새배열인덱스 부분을 바꿔준다.
// arr2[0] : null
// arr2[1] : B
// arr2[2] : C
// arr2[3] : D
// arr2[4] : E
// arr2[5] : F
// arr2[6] : null
4. for문을 통한 복사
int[] arr1 = new int[] {1, 2, 3, 4, 5};
int[] arr2 = new int[arr1.length];
for (int i = 0; i < arr1.length; i++) {
arr2[i] = arr1[i];
}
'Java' 카테고리의 다른 글
[Java] 클래스 class (0) | 2022.09.06 |
---|---|
[Java] 다차원 배열과 가변 배열 (0) | 2022.09.05 |
[Java] 조건문 if, switch (0) | 2022.09.03 |
[Java] 증감 연산자, 삼항 연산자 사용법 (0) | 2022.09.03 |
[Java] 타입 변환 Casting (0) | 2022.09.03 |