프로그래머스를 풀다가 정리 정리
[프로그래머스/java/Lv.0] 배열 자르기 (Arrays.copyOfRange())
* 문제 풀이 import java.util.Arrays;class Solution { public int[] solution(int[] numbers, int num1, int num2) { int answer[] = new int[numbers.length]; answer = Arrays.copyOfRange(numbers, num1, num2+1); return answer; }} Arrays.copyOfRange() 함수
amy-g.tistory.com
1. Arrays.copyOfRange()
자바에서 배열의 특정 구간을 복사하여 새로운 배열을 반환할 때 사용.
특정 범위 내의 요소들을 추출할 때 특히 유용하다.
Arrays.copyOfRange(원본 배열, 복사를 시작할 인덱스, 복사 종료 인덱스 );
~>
시작 인덱스부터 종료 인덱스 전까지의 요소를 포함하는 새로운 배열을 반환 (시작인덱스 ~ 종료인덱스 -1 범위)
종료 인덱스는 포함되지 않기 때문에 종료 인덱스도 포함하려면 +1 해줘야 함.
* 예시 코드
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] numbers = {1, 2, 3, 4, 5, 6};
// 인덱스 1부터 4까지 복사 (1번 인덱스부터 3번 인덱스까지 복사됨)
int[] subArray = Arrays.copyOfRange(numbers, 1, 4);
System.out.println(Arrays.toString(subArray)); // 출력: [2, 3, 4]
}
}
2. System.Arraycopy()
자바 배열을 복사하는 고성능 메서드.
배열의 특정 부분을 다른 배열로 복사할 때 사용.
public static void arraycopy(Object origin, int originPos, Object dest, int destPos, int length)
- origin : 원본 배열 (복사할 대상 배열).
- originPos: 원본 배열에서 복사를 시작할 인덱스.
- dest: 복사한 데이터를 저장할 대상 배열.
- destPos: 대상 배열에서 복사된 요소를 저장할 시작 인덱스.
- length: 복사할 요소의 개수.
origin에서 지정된 인덱스부터 원하는 개수만큼 dest로 복사.
원본 배열의 부분적 요소만 선택적으로 할 수 있으며, 그 복사된 값은 대상 배열의 특정 인덱스에 저장됨.
타입이 동일해야 한다.
배열의 남은 공간은 기본값인 0으로 채워진다.
* 예시 코드
public class Main {
public static void main(String[] args) {
int[] srcArray = {1, 2, 3, 4, 5};
int[] destArray = new int[5];
// srcArray의 인덱스 1부터 3개의 요소를 destArray의 인덱스 0부터 복사
System.arraycopy(srcArray, 1, destArray, 0, 3);
// destArray의 내용 출력
for (int num : destArray) {
System.out.print(num + " "); // 출력: 2 3 4 0 0
}
}
}
배열의 남은 공간은 기본값인 0으로 채워진다.
public class Main {
public static void main(String[] args) {
String[] srcArray = {"Apple", "Banana", "Cherry", "Date"};
String[] destArray = new String[4];
// srcArray의 인덱스 1부터 2개의 요소를 destArray의 인덱스 0부터 복사
System.arraycopy(srcArray, 1, destArray, 0, 2);
// destArray의 내용 출력
for (String fruit : destArray) {
System.out.print(fruit + " "); // 출력: Banana Cherry null null
}
}
}
문자열 배열에선 공간은 null로 채워진다.
3. for문
예) 혼공자 05-2 배열 - for문으로 배열 복사
public class ArrayCopyBtForExample{
public static void main(String[] args){
int[] oldIntArray = {1, 2, 3};
int[] newIntArray = new int[5];
for(int i = 0; i < oldIntArray.length; i++){
newIntArray[i] = oldIntArray;
}
for(int i = 0; i < newIntArray; i++){
System.out.println(newIntArray[i] + ", ");
}
//실행결과 1, 2, 3, 0, 0
}
}
▶ System.arraycopy()와 Arrays.copyOfRange() 함수의 차이
| 특징 | System.arraycopy() | Arrays.copyOfRange() |
| 대상 배열 | 미리 생성된 배열에 복사 | 새로운 배열 생성 후 반환 |
| 복사 범위 | 원본 배열과 대상 배열의 범위 직접 지정 | 원본 배열의 범위만 지정 |
| 성능 | 매우 빠름(네이티브 코드 사용) | 배열 생성 과정 떄문에 약간 느릴 수 있음 |
| 예외 처리 | 인덱스 범위 초과 시 예외 발생 | 범위 초과 시 기본값으로 채워짐 |
| 주 사용 용도 | 부분적으로 배열을 복사할 때 유용 | 전체나 일부를 새로운 배열로 복사할 때 유용 |
대상 배열이 이미 있는 경우에는 System.arraycopy()가, 새로운 배열을 반환하려는 경우에는 Arrays.copyOfRange()가 적합하다.
'공부 > JAVA' 카테고리의 다른 글
| [JAVA] 문자열 반복 repeat() (0) | 2024.11.14 |
|---|---|
| [JAVA] 배열 정렬 Arrays.sort() / 베열값 출력Arrays.toString() (0) | 2024.11.06 |
| [JAVA] charAt() 함수 (1) | 2024.11.03 |
| [JAVA] 문자열 공백 제거 trim()과 strip() (0) | 2024.10.31 |
| [JAVA] 제곱근을 계산하는 함수 Math.sqrt() (0) | 2024.10.23 |