1. 概要

このチュートリアルでは、さまざまな手法を使用して、JavaのArrayListから要素を削除する方法を説明します。 スポーツのリストが与えられたら、次のリストのいくつかの要素を取り除く方法を見てみましょう。

List<String> sports = new ArrayList<>();
sports.add("Football");
sports.add("Basketball");
sports.add("Baseball");
sports.add("Boxing");
sports.add("Cycling");

2. ArrayList#remove

ArrayList には、要素を削除するための2つの方法があります。削除する要素のインデックスを渡す方法、または削除する要素自体を渡す方法(存在する場合)です。 両方の使用法を確認します。

2.1. インデックスで削除

パラメータとしてインデックスを渡すremoveを使用すると、リスト内の指定された位置にある要素を削除し、後続の要素を左にシフトして、インデックスから1を引くことができます。 実行後、 remove メソッドは、削除された要素を返します。

sports.remove(1); // since index starts at 0, this will remove "Basketball"
assertEquals(4, sports.size());
assertNotEquals(sports.get(1), "Basketball");

2.2. 要素で削除

もう1つの方法は、このメソッドを使用して、リストから要素の最初の出現を削除することです。 正式に言えば、存在する場合はインデックスが最も低い要素を削除します。存在しない場合、リストは変更されません。

sports.remove("Baseball");
assertEquals(4, sports.size());
assertFalse(sports.contains("Baseball"));

3. 反復中の削除

ループ中にArrayListから要素を削除したい場合があります。 ConcurrentModificationExceptionが生成されないため、正しく実行するにはIteratorクラスを使用する必要があります。

ループ内の要素を取り除く方法を見てみましょう。

Iterator<String> iterator = sports.iterator();
while (iterator.hasNext()) {
    if (iterator.next().equals("Boxing")) {
        iterator.remove();
    }
}

4. ArrayList#removeIf (JDK 8+)

JDK 8以降バージョンを使用している場合は、 ArrayList# removeIf を利用できます。これにより、はArrayListのすべての要素を削除します。与えられた述語を満たします。

sports.removeIf(p -> p.equals("Cycling"));
assertEquals(4, sports.size());
assertFalse(sports.contains("Cycling"));

最後に、Apache Commons などのサードパーティライブラリを使用して実行できます。さらに詳しく知りたい場合は、すべての特定のオカレンスを効率的な方法で削除する方法を確認できます。

5. 結論

このチュートリアルでは、JavaでArrayListから要素を削除するさまざまな方法について説明しました。

いつものように、このチュートリアルで使用されるすべての例は、GitHub利用可能です。