Java - 配列から特定のIndex要素を削除する3つの方法

配列には固定長の要素があるため、基本的に特定の要素を削除して長さを減らすことはできません。 新しい配列を作成する必要がありますが、どのように実装するのかを見てみましょう。

1. 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() を 2 回使うと、削除したい 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]

Related Posts

codechachaCopyright ©2019 codechacha