1. 학습목표
배열의 복사에 대해 이해할 수 있다.
책에 있는 배열파트 예제는 모두 다루어보겠다.
2.필요 개념 문장정리
배열(array)의 복사
- 배열을 복사하는 방법은 두가지가 있는데 for문을 이용해서 배열을 복사하는 방법은 기존 배열보다 2배인 배열을 생성하는 것이 좋다
- int[] arr = new int[5];
int[] tmp = new int[arr.length*2];
for(int i = 0; i < arr.length; i++)
tmp[i] = arr[i];
arr = tmp; - 결국 참조변수 arr과 tmp는 같은 배열을 가리키게 된다. 배열 arr과 tmp는 이름만 다를 뿐 동일한 배열이다. 전의 arr배열은 더 이상 사용할 수 없다.
- 다른 방법으로 System.arraycopy()를 사용하면 지정된 범위의 값들을 한 번에 복사한다.
- for(int i = 0; i < num.length; i++) { newNum[1], num[i]}; 를
System.arraycopy(num, 0, newNum, 0, num.length); 로 바꾸면 된다. - num[0]에서 newNum[0]으로 num.length개의 데이터를 복사한다는 의미이다.
3. 코드작성
배열의 복사
class ArrayEX3 {
public static void main(String[] args) {
int[] arr = new int[5];
for(int i=0; i < arr.length; i++) {
arr[i] = i + 1;
System.out.println("[변경전]");
System.out.println("arr.length" + arr.length);
for(int i=0; i < arr.length; i++) {
System.out.println("arr["+i+"]:" + arr[i]);
int[] tmp = new int[arr.length*2];
for(int i=0; i < tmp.length; i++) {
tmp[i] = arr[i];
arr = tmp;
}
System.out.println("[변경후]");
System.out.println("arr.length" + arr.length);
for(int i=0; i < arr.length; i++) {
System.out.println("arr["+i+"]:" + arr[i]);
}
}
실행결과
[변경전]
arr.length: 5
arr[0]: 1
arr[1]: 2
arr[2]: 3
arr[3]: 4
arr[4]: 5
[변경후]
arr.length: 10
arr[0]: 1
arr[1]: 2
arr[2]: 3
arr[3]: 4
arr[4]: 5
arr[5]: 0
arr[6]: 0
arr[7]: 0
arr[8]: 0
arr[9]: 0
System.arraycopy()의 사용
class ArrayEX4 {
public static void main(String[] args) {
char[] abc = {'A', 'B', 'C', 'D'};
char[] num = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
System.out.println(abc);
System.out.println(num);
char[] result = new char[abc.length + num.length];
System.arraycopy(abc, 0, result, 0, abc.length);
System.arraycopy(num, 0, result, abc.length, num.length);
System.out.println(result);
System.arraycopy(abc, 0, num, 0, abc.length);
System.out.println(num);
System.arraycopy(abc, 0, num, 6, 3);
System.out.println(num);
}
}
실행결과
ABCD
123456789
ABCD123456789
ABCD456789
ABCDEF789
- System.out.println(abc); 및 System.out.println(num);: 배열을 직접 출력하면 배열의 내용이 연이어 출력됩니다.
- System.arraycopy: 배열의 일부분을 다른 배열로 복사합니다.
- System.arraycopy(abc, 0, result, 0, abc.length);: abc 배열을 result 배열의 처음부터 복사합니다.
- System.arraycopy(num, 0, result, abc.length, num.length);: num 배열을 result 배열의 abc.length 인덱스부터 복사합니다.
- System.out.println(result);: result 배열을 출력하면 abc 배열과 num 배열이 합쳐진 것을 확인할 수 있습니다.
- System.arraycopy(abc, 0, num, 0, abc.length);: abc 배열의 내용을 num 배열에 복사합니다. num 배열의 길이가 충분히 크기 때문에 오류 없이 복사됩니다.
- System.arraycopy(abc, 0, num, 6, 3);: abc 배열의 일부분을 num 배열의 인덱스 6부터 3개의 요소에 복사합니다. 따라서 num 배열의 일부가 변경됩니다.
4. 마무리
배열의 복사하기위해 for문과 arraycopy()메서드를 사용하는 방법을 이해할 수 있었다.
'언어 기초 > JAVA' 카테고리의 다른 글
[자바의정석 | Chapter 05 배열] String배열 예제12~15 (0) | 2024.01.11 |
---|---|
[자바의정석 | Chapter 05 배열] 배열 예제5 ~ 11 (2) | 2024.01.10 |
[자바의정석 | Chapter 05 배열] 배열 예제1,2 (1) | 2024.01.05 |
[자바의정석 | Chapter 04 조건문과 반복문] while,do-while문 (0) | 2024.01.04 |
[자바의정석 | Chapter 04 조건문과 반복문] for문, 향상된for문 (1) | 2023.12.18 |