[解決済み] Javaでforeachループでremoveを呼び出す [重複]。
2022-03-15 11:48:56
質問
Javaでは、foreachループを使用してコレクションを反復しているときに、コレクションに対してremoveを呼び出すことは合法ですか? たとえば、以下のような場合です。
List<String> names = ....
for (String name : names) {
// Do something
names.remove(name).
}
補足ですが、まだ反復されていない項目を削除することは合法でしょうか?例えば
//Assume that the names list as duplicate entries
List<String> names = ....
for (String name : names) {
// Do something
while (names.remove(name));
}
解決方法は?
コレクションを繰り返しながら安全に削除するには、イテレータを使用する必要があります。
例えば
List<String> names = ....
Iterator<String> i = names.iterator();
while (i.hasNext()) {
String s = i.next(); // must be called before you can call i.remove()
// Do something
i.remove();
}
から Java ドキュメント :
このクラスのイテレータと listIterator が返すイテレータは メソッドはフェールファストです。 イテレータが作成された後、そのイテレータを使用する以外の何らかの方法で イテレータ自身の remove メソッドや add メソッドを使用すると、イテレータは ConcurrentModificationException。このように、同時多発的な イテレータは、迅速かつきれいに失敗します。 任意の非決定的な動作をする危険性があります。 を使用します。
おそらく多くの初心者にとって不明なのは、for/foreach構文を使ってリストを反復処理すると、必然的にアクセス不能なイテレータが暗黙のうちに生成されるという事実でしょう。この情報は以下の通りです。 こちら
関連
-
Spring BootのテストメソッドFailed to load ApplicationContextの問題を解決する
-
ブラウザでの大容量ファイルスライスアップロード(Javaサーバサイド実装)
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaでNullPointerExceptionを回避する方法
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] JavaScriptのオブジェクトをループスルーまたは列挙するにはどうすればよいですか?
-
[解決済み] Array.forEachでbreakを呼び出すようなショートサーキット
-
[解決済み] Javaの「for each」ループはどのように機能するのですか?
-
[解決済み] Javaでリストを反復処理する方法
-
[解決済み】PHPの'foreach'は実際どのように動作するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
java の例外が発生しました java
-
javaの実行中に「javaの例外が発生しました」と表示された場合はどうすればよいですか?
-
final, finally, finalizeの違いについて話してください。
-
JQuery DataTable 详解
-
サーブレットクラスのインスタンス化エラーの解決法
-
Spring BootのテストメソッドFailed to load ApplicationContextの問題を解決する
-
Exception: java.util.NoSuchElementException: 行が見つかりません
-
HttpClientがGZIP形式でない場合の対処法
-
javax.net.ssl.SSLException: 読み取りエラー: ssl=0xdeae5100: システムコール中の I/O エラー、接続 res
-
[解決済み] コレクションを反復処理し、ループ内でオブジェクトを削除する際に ConcurrentModificationException を回避する。