ホームページ  >  記事  >  Java  >  Javaでリスト要素を削除する方法

Javaでリスト要素を削除する方法

王林
王林オリジナル
2020-02-01 20:33:464704ブラウズ

Javaでリスト要素を削除する方法

Java でリスト要素を削除する方法は次のとおりです:

1. 正順の削除

正順に削除します。最大 1 つの要素を削除する場合は、削除後に Break ステートメントを使用してループから抜け出すだけで済みます。複数の要素を削除する必要がある場合、現在のリストのサイズとインデックスの制御に注意を払わない場合次の要素では、java.lang.IndexOutOfBoundsException 例外を簡単に報告できます

public static void remove(List<String> list, String target) {    
for(int i = 0, length = list.size(); i < length; i++){
        String item = list.get(i);        
        if(target.equals(item)){
            list.remove(item);
            length--;
            i--;
        }
    }
}

無料の学習ビデオ チュートリアルの推奨事項: Java ビデオ チュートリアル

2. 逆削除

逆削除は前方削除を克服できますリスト サイズと次の要素のインデックスの追加管理が必要になるという問題も、

public static void remove(List<String> list, String target) {    
for(int i = list.size() - 1; i >= 0; i--){
        String item = list.get(i);
        if(target.equals(item)){
            list.remove(item);
        }
    }
}
# を使用すると非常に便利です## 3. イテレータのremove() メソッドの削除 (推奨)

public static void remove(List<String> list, String target) {
    Iterator<String> iter = list.iterator();
    while (iter.hasNext()) {
        String item = iter.next();
            if (item.equals(target)) {
            iter.remove();
        }
    }
}

4. CopyOnWriteArrayList のスレッド セーフティ CopyOnWrite コンテナを使用して

を削除します。 CopyOnWrite コンテナは、書き込み時にコピーされるコンテナです。一般に理解されているのは、コンテナに要素を追加するとき、現在のコンテナに要素を直接追加するのではなく、まず現在のコンテナをコピーして新しいコンテナを作成し、次にその新しいコンテナに要素を追加するということです。次に、元のコンテナの参照が新しいコンテナを指すようにします。

この利点は、現在のコンテナーは要素を追加しないため、ロックせずに CopyOnWrite コンテナーで同時読み取りを実行できることです。したがって、CopyOnWriteコンテナも読み書き分離の考え方であり、読み書きは別のコンテナです。

public static List<String> remove(ArrayList<String> list, String target) {
    CopyOnWriteArrayList<String> cowList = new CopyOnWriteArrayList<String>(list);
    for (String item : cowList) {
            if (item.equals(target)) {
            cowList.remove(item);
        }
    }
                return cowList;
}

注:

1. CopyOnWriteArrayList を使用する利点は、トラバーサル中に新しい要素を削除できるだけでなく追加できることです。

2. 上記のメソッドはパラメーター リストを変更しませんが、呼び出し元に CopyOnWriteArrayList を返します。つまり、CopyOnWriteArrayList は、それを構築するリストを変更しませんが、内部的にリストを維持します。これは支払う必要があります。特にご注意ください。

3. CopyOnWriteArrayList は ArrayList のサブクラスではありませんが、List インターフェイスを実装します。

5. for ループの削除の強化

for ループを強化して要素を削除し、ループを継続すると、要素の使用時に同時変更が発生するため、java.util.ConcurrentModificationException 例外が報告されます。 in 例外がスローされますが、削除直後にbreak文を使用してループから抜け出すとエラーが発生しないため、最大1要素の削除に適しています。

public static void remove(List<String> list, String target) {
    for (String item : list) {
            if (item.equals(target)) {
            list.remove(item);
                        break;
        }
    }
}

6. ストリーム API フィルター

Java8 で導入されたストリーム API では、List 要素を削除するための、新しくて簡単なメソッド フィルターが導入されました。このメソッドは、元の List オブジェクトを変更せず、新しいオブジェクトを返す必要があります。次の例は、ストリームを使用してコレクション内の「*」要素を削除する方法を示しています。

List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("*");
list.add("c");
list.add("*");
List<String> result = list
                        .stream()
                        .filter(item -> !"*".equals(item))
                        .collect(Collectors.toList());

おすすめの関連記事とチュートリアル:

Java 入門チュートリアル

以上がJavaでリスト要素を削除する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。