[JAVA] 배열 복사하는 방법
2022. 9. 2. 18:06
자바에서 배열을 복사하는 방법
- Arrays.copyOf
- Arrays.copyOfRange
- System.arraycopy
1. Arrays.copyOf(T[] original, int newLength)
original - 복사할 배열
newLength - 복사할 길이
Arrays.copyOf는 배열의 시작인 0번 인덱스부터 newLength의 길이만큼 복사한다.
만약 newLength의 값이 original 배열의 길이보다 큰 값일 경우 해당하는 인덱스들의 값은 기본값으로 초기화된다.
import java.util.Arrays;
int[] arr = {1,2,3,4,5,6};
int[] copyOne = Arrays.copyOf(arr,3);
int[] copyTwo = Arrays.copyOf(arr,10);
System.out.println(Arrays.toString(copyOne)); //[1, 2, 3]
System.out.println(Arrays.toString(copyTwo)); //[1, 2, 3, 4, 5, 6, 0, 0, 0, 0]
copyOf 메서드를 이용해서 원하는 요소를 새로운 배열에 계속해서 추가할 수 있다.
다음은 배열에서 짝수만 찾아서 새로운 배열에 계속 추가하는 코드이다.
import java.util.Arrays;
int[] arr = {2, 3, 6, 8, 9, 11, 15};
int[] evenArr = {};
for (int i = 0; i < arr.length; i++) {
if (arr[i] % 2 == 0) {
evenArr = Arrays.copyOf(evenArr, evenArr.length + 1);
evenArr[evenArr.length-1] = arr[i];
}
}
System.out.println(Arrays.toString(evenArr)); // [2, 6, 8]
2. Arrays.copyOfRange(T[] original, int from, int to)
original - 복사할 배열
from - 복사할 original 배열의 시작 인덱스
to - 복사할 original 배열의 끝 인덱스
Arrays.copyOfRange는 original 배열의 from 인덱스부터 to 인덱스 -1까지 복사한다.
copyOfRange 또한 original 배열의 길이보다 큰 값을 to로 입력해도 기본값으로 초기화한다.
import java.util.Arrays;
int[] arr = {1,2,3,4,5,6};
int[] copyOne = Arrays.copyOfRange(arr,2,6);
int[] copyTwo = Arrays.copyOfRange(arr,5,10);
System.out.println(Arrays.toString(copyOne)); //[3, 4, 5, 6]
System.out.println(Arrays.toString(copyTwo)); //[6, 0, 0, 0, 0]
3. System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
src - 복사할 배열
srcPos - 복사할 src의 첫 번째 인덱스
dest - 복사 대상 배열
destPos - 복사될 dest의 첫 번째 인덱스
length - 복사될 요소의 개수
System.arraycopy는 src의 srcPos 인덱스부터 length만큼 dest 배열의 destPos부터 복사한다.
arrayCopy는 copyOf와 copyOfRange와 다르게 배열의 범위보다 크게 설정하면 Exception을 발생시킨다.
int[] arr = {1,2,3,4,5,6};
int[] copyOne = new int[6];
System.arraycopy(arr,0,copyOne,0,arr.length);
System.out.println(Arrays.toString(copyOne)); // [1, 2, 3, 4, 5, 6]
arr = new int[] {10,11,12};
System.arraycopy(arr,0,copyOne,2,3);
System.out.println(Arrays.toString(copyOne)); // [1, 2, 10, 11, 12, 6]
System.arraycopy(arr,0,copyOne,4,3); // ArrayIndexOutOfBoundsException
arrayCopy를 사용하면 두 개의 배열을 하나의 배열로 합칠 수 있다.
String[] arrOne = {"a","b","c"};
String[] arrTwo = {"one","two","three","four"};
String[] arrConcat = new String[arrOne.length + arrTwo.length];
System.arraycopy(arrOne,0,arrConcat,0,arrOne.length);
System.out.println(Arrays.toString(arrConcat)); // [a, b, c, null, null, null, null]
System.arraycopy(arrTwo,0,arrConcat,arrOne.length,arrTwo.length);
System.out.println(Arrays.toString(arrConcat)); // [a, b, c, one, two, three, four]
'Programming > Java' 카테고리의 다른 글
[JAVA] 객체지향 프로그래밍(OOP) - 캡슐화 (0) | 2022.09.07 |
---|---|
[JAVA] 객체지향 프로그래밍(OOP) - 상속 (1) | 2022.09.07 |
[JAVA] 생성자(Constructor) (0) | 2022.09.06 |
[JAVA] static 변수와 static 메서드 (0) | 2022.09.06 |
[JAVA] 클래스와 객체 (0) | 2022.09.05 |