1. 概要

このクイックチュートリアルでは、 Apache Commons Lang ライブラリを使用して、Javaの配列から要素を削除するさまざまな方法について学習します。

2. Maven

commons-lang3依存関係をプロジェクトのpom.xmlファイルに追加しましょう。

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.12.0</version>
</dependency>

3. 要素の削除

始める前に、ApacheCommonsLangライブラリのArrayUtilsクラスを使用せずに配列から要素を削除するとどうなるかを見てみましょう。

以下の配列を前提として、 index2の要素を削除しましょう。

これを行う簡単な方法は、インデックス2 に格納されている値を、配列の最後に到達するまでインデックス3に格納されている値に置き換えることです。

上記の方法で要素を削除すると、配列のサイズは同じのままになり、最後のインデックスに格納されている値は空になることに注意してください。 配列には初期化中に割り当てられた固定メモリサイズがあるため、要素を削除しても配列のサイズは調整されません。

次に、ApacheCommonsLangのArrayUtilsクラスからremoveメソッドを使用して要素を削除するときの配列表現を見てみましょう。

ご覧のとおり、要素が削除された後、ここでの配列サイズは5に調整されます。 remove メソッドは、まったく新しい配列を作成し、削除される値を除くすべての値をコピーします。

ArrayUtils クラスは、配列から要素を削除する2つの方法を提供します。 次にこれらを見てみましょう。

4. 入力としてのインデックスの使用

要素を削除する最初の方法は、 ArrayUtils#removeを使用したインデックスによるものです。

public int[] removeAnElementWithAGivenIndex(int[] array, int index) {
      return ArrayUtils.remove(array, index);
}

もう1つのバリエーションは、 removeAll メソッドです。これを使用して、インデックスを指定して、配列から複数の要素を削除できます。

public int[] removeAllElementsWithGivenIndices(int[] array, int... indices) {
    return ArrayUtils.removeAll(array, indices);
}

5. 要素を入力として使用する

または、削除するもののインデックスがわからないとします。 その場合、 ArrayUtils#removeElementを使用して削除する要素を提供できます。

public int[] removeFirstOccurrenceOfGivenElement(int[] array, int element) {
    return ArrayUtils.removeElement(array, element);
}

削除したい要素が複数ある場合に備えて、このメソッドのもう1つの便利なバリエーション ArrayUtils#removeElementsを次に示します。

public int[] removeAllGivenElements(int[] array, int... elements) {
    return ArrayUtils.removeElements(array, elements);
}

特定の要素のすべての出現を削除したい場合があります。 ArrayUtils#removeAllOccurences を使用してこれを行うことができます:

public int[] removeAllOccurrencesOfAGivenElement(int[] array, int element) {
    return ArrayUtils.removeAllOccurences(array, element);
}

6. 結論

この記事では、 Apache CommonsLangライブラリを使用して配列から要素を削除するさまざまな方法について説明しました。

エッジケースの詳細については、このチュートリアルのソースコードと、GitHubで入手可能な関連する単体テストを確認してください。