ホームページ Java &#&チュートリアル Javaでリスト要素を削除する方法

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

Feb 01, 2020 pm 08:33 PM
java list 要素 消去

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 までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Javaの平方根 Javaの平方根 Aug 30, 2024 pm 04:26 PM

Javaの平方根

Javaの完全数 Javaの完全数 Aug 30, 2024 pm 04:28 PM

Javaの完全数

Java の乱数ジェネレーター Java の乱数ジェネレーター Aug 30, 2024 pm 04:27 PM

Java の乱数ジェネレーター

Javaのアームストロング数 Javaのアームストロング数 Aug 30, 2024 pm 04:26 PM

Javaのアームストロング数

ジャワのウェカ ジャワのウェカ Aug 30, 2024 pm 04:28 PM

ジャワのウェカ

Javaのスミス番号 Javaのスミス番号 Aug 30, 2024 pm 04:28 PM

Javaのスミス番号

Java Springのインタビューの質問 Java Springのインタビューの質問 Aug 30, 2024 pm 04:29 PM

Java Springのインタビューの質問

Java 8 Stream Foreachから休憩または戻ってきますか? Java 8 Stream Foreachから休憩または戻ってきますか? Feb 07, 2025 pm 12:09 PM

Java 8 Stream Foreachから休憩または戻ってきますか?

See all articles