배열 자르기
오늘은 자바에서 배열이 하나 주어졌을 때 시작 인덱스와 마지막 인덱스 범위만큼 배열을 자르는 방법을 소개하고자 한다.
예를 들어 1부터 10까지 값을 가지는 배열에서 시작 인덱스를 3으로, 마지막 인덱스를 7로 주어 다음과 같은 결과를 얻고자 한다.
기존 배열 : [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
시작 인덱스 : 3
마지막 인덱스 : 7
특정 범위의 배열 : [4, 5, 6, 7]
1. System클래스의 arraycopy 메소드
System 클래스에서 제공하는 arraycopy() 메소드를 활용하여 특정 위치부터 특정 개수만큼 새로운 배열에 값을 할당할 수 있다.
System.arraycopy(A, B, C, D, E);
매개변수
A : 원본 배열
B : 원본 배열에서 시작할 위치
C : 새로운 배열
D : 새로운 배열의 시작 위치
- 0으로 설정하는 경우 복사한 데이터가 새로운 배열의 인덱스 0부터 할당된다.
- 3으로 설정하는 경우 복사한 데이터가 새로운 배열의 인덱스 3부터 할당된다.
E : 원본 배열에서 복사되는 데이터 개수
코드 예제
int[] srcArray = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int[] destArray = new int[5];
System.arraycopy(srcArray, 3, destArray, 0, 4);
System.out.println("srcArray: " + Arrays.toString(srcArray));
System.out.println("destArray: " + Arrays.toString(destArray));
실행 결과
srcArray: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
destArray: [4, 5, 6, 7]
2. Arrays클래스의 copyOfRange 메소드
첫 번째 매개변수로 원본 배열을 전달하고 두 번째 매개변수로 시작 위치, 세번째 매개 변수로 마지막 위치를 전달하여 배열을 자른다.
Arrays.copyOfRange(원본 배열, 시작 위치, 마지막 위치);
코드 예제
int[] srcArray = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int[] destArray = Arrays.copyOfRange(srcArray, 3, 7);
System.out.println("srcArray: " + Arrays.toString(srcArray));
System.out.println("destArray: " + Arrays.toString(destArray));
실행 결과
srcArray: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
destArray: [4, 5, 6, 7]
3. Stream API
자바 1.8버전 이상인 경우 Stream API를 활용하여 특정 범위의 데이터를 가져올 수 있다.
코드 예제
int[] srcArray = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int[] destArray = IntStream.range(3, 7).map(num -> srcArray[num]).toArray();
System.out.println("srcArray: " + Arrays.toString(srcArray));
System.out.println("destArray: " + Arrays.toString(destArray));
실행 결과
srcArray: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
destArray: [4, 5, 6, 7]
'프로그래밍 > Java' 카테고리의 다른 글
[Java] Stream (0) | 2023.04.03 |
---|---|
[Java] toString()과 String.valueOf() 차이점 (0) | 2022.11.13 |
[Java] scan.next() 와 scan.nextLine의 차이 (0) | 2022.04.14 |
[Java] Enum (0) | 2022.03.07 |
[Java] 문자열 배열에 저장하기 (1) | 2021.11.28 |