修正方法: Java コレクション エラー: コレクション トラバーサル例外

PHPz
リリース: 2023-08-25 23:48:22
オリジナル
1721 人が閲覧しました

修正方法: Java コレクション エラー: コレクション トラバーサル例外

解決方法: Java コレクション エラー: コレクション トラバーサル例外

はじめに:
Java 開発では、コレクションは、オブジェクトを保存および操作するために非常に一般的に使用されるデータ構造です。データのセット。ただし、トラバーサル操作にコレクションを使用する場合、コレクション トラバーサル例外が頻繁に発生します。この記事では、この問題の原因と解決策について説明し、対応するコード例を示します。

1. コレクション走査例外の理由:
反復子または for-each ループを使用してコレクションを走査する場合、走査プロセス中にコレクションが変更されると (要素の追加または削除など)、 ConcurrentModificationException がスローされます。これは、走査プロセス中に、反復子または for-each ループがコレクションの構造が変更されたかどうかを検出するカウンターを維持し、変更が見つかると例外をスローするためです。

2. 解決策:

  1. Iterator を使用してコレクションを走査し、Iterator のremove() メソッドを使用して走査プロセス中に要素を削除します。例は次のとおりです。
List<String> list = new ArrayList<>();
// 添加元素
list.add("A");
list.add("B");
list.add("C");

Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
    String item = iterator.next();
    if (item.equals("B")) {
        iterator.remove(); // 删除元素
    }
}
ログイン後にコピー
  1. 通常の for ループを使用してコレクションを走査する場合、List のremove() メソッドを使用して要素を削除できます。インデックスの変更を避けるために、逆の順序でコレクションを実行します。例は次のとおりです。
List<String> list = new ArrayList<>();
// 添加元素
list.add("A");
list.add("B");
list.add("C");

for (int i = list.size() - 1; i >= 0; i--) {
    String item = list.get(i);
    if (item.equals("B")) {
        list.remove(i); // 删除元素
    }
}
ログイン後にコピー
  1. ConcurrentHashMap や CopyOnWriteArrayList などの同時コレクション クラスを使用します。これにより、例外をスローせずにトラバーサル中にコレクションを変更できます。例は次のとおりです。
ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<>();
// 添加元素
map.put("A", 1);
map.put("B", 2);
map.put("C", 3);

for (Map.Entry<String, Integer> entry : map.entrySet()) {
    if (entry.getValue() == 2) {
        map.remove(entry.getKey()); // 删除元素
    }
}
ログイン後にコピー

結論:
コレクション トラバーサル例外は、トラバーサル プロセス中のコレクションへの変更によって発生します。この問題を解決するには、Iterator を使用してコレクションを走査し、remove() メソッドを使用するか、通常の for ループを使用してコレクションを走査し、List の Remove() メソッドを使用するか、同時コレクション クラスを使用します。適切なソリューションを選択すると、コレクション トラバーサル例外の問題を効果的に回避し、プログラムの通常の動作を保証できます。

総単語数: 437 単語

以上が修正方法: Java コレクション エラー: コレクション トラバーサル例外の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート