느리더라도 꾸준히

[배열]배열 복사 메서드 비교하기 본문

Java

[배열]배열 복사 메서드 비교하기

테디규 2022. 11. 3. 10:03

목표

  1. 왜 배열을 복사하는지 알고 있다.
  2. 배열을 복사하는 두 메서드의 차이를 이해하고있다.
    • System.arraycopy()
    • String.copyOf() & String.CopyOfRange

배열 복사하기

배열은 같은타입으로 구성되고, 순서가 존재하며 크기를 정해놓는 자료구조입니다. 그러므로 한번 크기를 설정한 배열의 크기를 따로 수정하는 메서드는 존재하지 않습니다. 대신 배열을 복사하여 새로 만들면서 수정한 것과 같이 사용할 수 있습니다.

아래의 배열을 복사하는 두 메서드를 비교해 봅시다.

1.System.arraycopy()

System.arraycopy(원본배열, 원본의 복사할 시작 index, 복사본 배열, 복사본 배열의 시작 index, 복사할 개수)

public static void main(String[] args) {
        Solution sol = new Solution();
        int[] arr = {1,2,3,4,5};

        int[] newArr = new int[10];


        // 원래의 배열 출력
        System.out.println("=======원래의 배열========");
        for(int x : arr) System.out.printf(x + " ");
        System.out.println();

        System.arraycopy(arr,0, newArr, 1, 5);
        System.out.println("======= arraycopy()로 배열 복사하기========");
        for(int x : newArr) System.out.printf(x + " ");

결과값

=======원래의 배열========
1 2 3 4 5 
======= arraycopy()로 배열 복사하기========
0 1 2 3 4 5 0 0 0 0
  1. return 값이 없다.
  2. 이미 존재하는 배열에 원하시는 시작지점부터 복사 할수 있다.

2. Arrays.copyOf() & Arrays.copyOfRange

copyOf(복사될 배열, 새로운 배열의 크기)

        System.out.println("======= copyOf()로 배열 복사하기========");
        int[] newArr2 = Arrays.copyOf(arr,arr.length+5);
        for(int x : newArr2) System.out.printf(x + " ");

결과값

=======원래의 배열========
1 2 3 4 5 
======= copyOf()로 배열 복사하기========
1 2 3 4 5 0 0 0 0 0 
  1. arraycopy() 와는 다르게 매개변수의 타입으로 새로운 배열을 Return 합니다.

copyOfRange(복사될 배열, 복사될배열의 시작위치, 복사될배열의 끝위치)

        System.out.println("======= copyOfRange()로 배열 복사하기========");
        int[] newArr3 = Arrays.copyOfRange(arr,1, 10);
        for(int x : newArr3) System.out.printf(x + " ");

결과값

=======원래의 배열========
1 2 3 4 5 
======= copyOfRange()로 배열 복사하기========
2 3 4 5 0 0 0 0 0 
  1. 복사될 배열의 원하는 부분을 복사해올수 있습니다.
  2. arraycopy와는 다르게 매개변수의 타입으로 새로운 배열을 Return합니다.
  3. to 범위 > 복사될 배열의 크기일때는, 잉여 부분을 0으로 채워넣습니다.
Comments