Java - 배열에서 특정 Index 요소 제거, 3가지 방법

배열은 고정된 길이의 요소를 갖고 있기 때문에, 기본적으로 특정 요소를 제거하여 길이를 줄일 수는 없습니다. 새로운 배열을 만들어야 하는데, 어떻게 구현하는지 알아보겠습니다.

1. List를 이용하여 배열에서 요소 제거

List는 가변적으로 길이를 변경할 수 있는 자료구조입니다. 배열을 리스트로 변경한 뒤에 요소들을 제거하고, 다시 리스트를 배열로 변경하는 방법이 있습니다.

아래 예제에서 remove()는 배열을 리스트로 변경하고 인자로 전달된 Index를 제거합니다. 그리고 리스트를 배열로 변경하여 리턴합니다.

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Example {

    private static String[] remove(String[] arr, int index) {
        if (arr == null || index < 0 || index >= arr.length) {
            return arr;
        }

        List<String> result = new ArrayList<>(Arrays.asList(arr));
        result.remove(index);
        return result.toArray(new String[0]);
    }

    public static void main(String[] args) {

        String[] arr = {"a", "b", "c", "d", "e"};

        arr = remove(arr, 3);

        System.out.println(Arrays.toString(arr));
    }
}

Output:

[a, b, c, e]

2. System.arraycopy()를 이용하여 배열에서 요소 제거

System.arraycopy(srcArr, srcPos, destArr, destPos, length)는 srcArr의 destArr로 복사하는데 srcArr의 srcPos부터 복사를 시작합니다. 복사되는 위치는 destArr의 destPos Index부터입니다. 복사하는 길이는 length로 인자를 전달하면 됩니다.

System.arraycopy()의 자세한 API 사용 방법은 Java - 배열 복사 (deep copy)를 참고해주세요.

System.arraycopy()를 두번 사용하면, 제거하려는 Index를 제외하고 모든 요소들을 복사할 수 있습니다. 예를 들어 배열의 크기가 5이고, Index 3의 요소를 제거할 때, Index 0에서 2까지를 새로운 배열의 Index 0에서 2에 복사할 수 있습니다. 그리고 Index 4부터 5까지의 요소들을 새로운 배열의 Index 3에서 4까지 복사할 수 있습니다. 이렇게 하면 Index 3이 제거된, 길이가 4인 배열을 만들 수 있습니다.

import java.util.Arrays;

public class Example1 {

    private static String[] remove(String[] arr, int index) {
        if (arr == null || index < 0 || index >= arr.length) {
            return arr;
        }

        String[] result = new String[arr.length - 1];

        System.arraycopy(arr, 0, result, 0, index);
        System.arraycopy(arr, index + 1, result, index, arr.length - index - 1);
        return result;
    }

    public static void main(String[] args) {

        String[] arr = {"a", "b", "c", "d", "e"};

        arr = remove(arr, 3);

        System.out.println(Arrays.toString(arr));
    }
}

Output:

[a, b, c, e]

3. for문을 이용하여 배열에서 요소 제거

2번과 동일한 방법인데, 특정 요소를 제외한 나머지를 모두 새로운 배열에 복사시키는 방법입니다.

대신 System.arraycopy()와 같은 라이브러리를 사용하지 않고 for문을 사용하여 직접 제거할 요소를 제외하고 나머지 요소들을 복사하였습니다.

import java.util.Arrays;

public class Example2 {

    private static String[] remove(String[] arr, int index) {
        if (arr == null || index < 0 || index >= arr.length) {
            return arr;
        }

        String[] result = new String[arr.length - 1];

        int copyIndex = 0;
        for (int i = 0; i < arr.length; i++) {
            if (i == index) {
                continue;
            }
            result[copyIndex++] = arr[i];
        }
        return result;
    }

    public static void main(String[] args) {

        String[] arr = {"a", "b", "c", "d", "e"};

        arr = remove(arr, 3);

        System.out.println(Arrays.toString(arr));
    }
}

Output:

[a, b, c, e]
Loading script...

Related Posts

codechachaCopyright ©2019 codechacha