[Java] 배열 복사 (Arrays.copyOfRange() / System.Arraycopy() / for문)

2024. 10. 21. 15:56·공부/JAVA

프로그래머스를 풀다가 정리 정리

https://amy-g.tistory.com/25

 

[프로그래머스/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
'공부/JAVA' 카테고리의 다른 글
  • [JAVA] 배열 정렬 Arrays.sort() / 베열값 출력Arrays.toString()
  • [JAVA] charAt() 함수
  • [JAVA] 문자열 공백 제거 trim()과 strip()
  • [JAVA] 제곱근을 계산하는 함수 Math.sqrt()
amying
amying
공부해보겠슨
  • amying
    꽁꽁 얼어붙은 자바 위를 자박자박
    amying
  • 글쓰기 관리
  • 전체
    오늘
    어제
    • 분류 전체보기 (332)
      • 공부 (55)
        • JAVA (17)
        • Spring (17)
        • Java Script (1)
        • React (0)
        • SQL (3)
        • DB (1)
        • CS (13)
        • 기술면접 (3)
      • Git (2)
      • 강의 (36)
        • 부스트코스: Connect On: 테크와 나를 잇.. (16)
        • 부스트코스: CS50 (20)
      • 네이버 부스트캠프 베이직 (25. 06) (0)
      • 에러 (10)
      • 코테 (205)
        • 백준 (29)
        • 프로그래머스 JAVA Lv.0 (116)
        • 프로그래머스 JAVA Lv.1 (7)
        • 프로그래머스 SQL (53)
      • 개인 프로젝트 (16)
        • 책첵 CHAEKCHECK (2)
        • 일정 관리 서비스 만들기 (0)
        • 게시판 만들기 (eclipse-JSP) (14)
      • 이것저것 (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    코딩테스트_입문
    코테
    springbot
    lombok
    CS50
    업무자동화
    책첵개발일지
    ORACLE에러
    Java
    부스트코스
    오라클에러
    git명령어
    부스트코스강의
    알고리즘
    데이터연동
    에러
    프로그래머스
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.4
amying
[Java] 배열 복사 (Arrays.copyOfRange() / System.Arraycopy() / for문)
상단으로

티스토리툴바