Home [Java] 배열 복사 메서드 비교
Post
Cancel

[Java] 배열 복사 메서드 비교

코딩테스트 문제를 풀다가 부분 배열 반환에 대해 공부 중 정리하게 되었습니다.

1️⃣ Arrays.copyOf()

Arrays.copyOf(복사할 배열, 길이)

1
2
int[] original = {1, 2, 3};
int[] copy = Arrays.copyOf(original, 5);
  • 기능 : 배열을 지정한 길이만큼 복사
  • 특징
    • 원본보다 길이가 크면 남는 자리는 0으로 채워짐
    • copy.length를 지정함
  • 시간 복잡도 : O(n) (복사할 길이 n)
  • 내부 구현 : System.arraycopy() 사용

2️⃣ Arrays.copyOfRange()

Arrays.copyOfRange(복사할 배열, from, to)

1
2
int[] original = {1, 2, 3, 4, 5};
int[] copy = Arrays.copyOfRange(original, 1, 4);  // [2, 3, 4]
  • 기능 : from 인덱스부터 to-1 인덱스까지 복사
  • 특징
    • 원본보다 to 인덱스가 크면 남는 자리는 배열의 타입 기본값으로 채워짐
  • 시간 복잡도 : O(to - from)
  • 내부 구현 : System.arraycopy() 사용

3️⃣ System.arraycopy()

System.arraycopy(복사할 배열, 복사 시작 idx, 대상 배열, 대상 시작 idx, 복사할 길이)

1
2
3
int[] original = {1, 2, 3, 4, 5};
int[] dest = new int[3];
System.arraycopy(original, 1, dest, 0, 3);  // [2, 3, 4]
  • 기능 : 배열의 원하는 범위를 다른 배열에 직접 복사
  • 특징
    • 가장 빠름 (대용량 복사 시 유리)
    • 대상 배열을 직접 만들어야 함
  • 시간 복잡도 : O(n)
  • 내부 구현 : JVM 내부 native 코드 사용

4️⃣ 전체 비교 정리

메서드목적복사 범위대상 배열 자동 생성남는 공간 처리속도
Arrays.copyOf()길이 기반 복사0 ~ newLengthO0으로 채움보통
Arrays.copyOfRange()범위 기반 복사[from, to)O0으로 채움보통
System.arraycopy()수동 복사지정된 srcPos~srcPos+length✕ (new로 직접 생성)N/A가장 빠름
This post is licensed under CC BY 4.0 by the author.