目次
#1. Iterator と foreach の違い
1.foreach の最下層は Iterator
最初のループ:
3. イテレータが最下層である理由、foreach がエラーを報告する理由
3. ソース コード メソッドを表示します。
ホームページ Java &#&チュートリアル Java ArrayList を走査するときに要素を削除するために foreach と iterator を使用することの違いは何ですか?

Java ArrayList を走査するときに要素を削除するために foreach と iterator を使用することの違いは何ですか?

Apr 27, 2023 pm 03:40 PM
java foreach arraylist

    #1. Iterator と foreach の違い

    • 多態性の違い (foreach の最下層は Iterator)

    • Iterator はインターフェイス型であり、コレクションや配列の型は関係ありません。

    • for と foreach の両方で、その型を知る必要があります。 ;

    1.foreach の最下層は Iterator

    # によって記述されたコードであると言われているのはなぜですか? ##:

    Java ArrayList を走査するときに要素を削除するために foreach と iterator を使用することの違いは何ですか?

    ##逆コンパイルされたコード:

    Java ArrayList を走査するときに要素を削除するために foreach と iterator を使用することの違いは何ですか?2. 削除との違いforeach と iterator の間

    #Ali の最初の Java 開発マニュアルを見てみましょう

    しかし、時間 1 ではエラーは報告されず、時間 2 ではエラーが報告されます (java.util.ConcurrentModificationException)。


    #最初に ArrayList のイテレータ メソッドの実装を見てみましょう: Java ArrayList を走査するときに要素を削除するために foreach と iterator を使用することの違いは何ですか?

    # # new Itr() を呼び出して Itr クラス (イテレータ) を生成します。このとき、Itr の 3 つのパラメータが初期化されます。

    Java ArrayList を走査するときに要素を削除するために foreach と iterator を使用することの違いは何ですか?

    Java ArrayList を走査するときに要素を削除するために foreach と iterator を使用することの違いは何ですか?カーソルは次のインデックス位置 (0 から始まります) を表します。

    • size は、コレクション (2)

    • 例外クラスをスローします
    次のメソッド () では、checkForComodification が等しいかどうかチェックされます


    modCount 変更数 (それぞれの追加と削除は 1 になります) ExpectedModCount 予想される最大数

    Java ArrayList を走査するときに要素を削除するために foreach と iterator を使用することの違いは何ですか?1.remove 操作のソース コード分析

    まず、削除について見てみましょう。 「2」の状況:

    最初のループ:

    このときの modCount と ExpectedModCount は両方とも 2 (modCount は 2 回追加されているため 2) なので、最初のループでは例外はスローされません。例外は、ループ内で初めてではない場合にスローされます。次のメソッドが完了すると、foreach ループ メソッド本体内の Remove メソッドの if 条件が満たされなくなり、ループが終了します。
    2 番目のループ:

    2 番目のループの hasNext メソッドと next メソッドが正常に完了すると、foreach ループのメソッド本体に Remove メソッドが入り、要素を削除します。このとき、size-1 は 1 になります。 Remove メソッド内の fastRemove メソッドでは、modCount が 1 に設定されており、3 になります。

    3 番目のループ: Java ArrayList を走査するときに要素を削除するために foreach と iterator を使用することの違いは何ですか?

    次に、3 番目のループの hasNext メソッドに進みます。通常の状況では、このメソッドは false を返しますが、この時点のサイズは 1 に変更されており、この時点のカーソルは 2 (カーソルは次のインデックス位置を表します) であるため、この 2 つは等しくなく、エラーが発生します。 true なので、引き続き次のメソッドの checkForComodification メソッドに進み、現時点での modCount と ExpectedModCount が等しいかどうかを判断します。この時点の modCount は 3 に変更されており、expectedModCount の値 2 とは異なるため、ここで ConcurrentModificationException 例外がスローされました。 「1」を削除するときに例外がスローされない理由を見てみましょう:


    最初のループ:

    #Same上記のように、この時点の modCount と ExpectedModCount は両方とも 2 であるため、最初のループの hasNext メソッドと next メソッドは例外をスローしません。この後、foreach ループ メソッド本体に Remove メソッドを入力して要素を削除します。上と同様に、size-1 は 1 になり、modCount 1 は 3 になります。

    2 番目のループ:

    2 番目のループの hasNext メソッドでは、このときのカーソルは 1、サイズも 1 であり、それらは等しいです。 。したがって、hasNext メソッドが false を返した場合、foreach ループから飛び出し、後続の next メソッドには行かないため、例外はスローされません。

    2. ソースコードの手順

    初回

    最初の文は iterator() を呼び出します、

    new Itr() を呼び出して、Itr クラス (反復子) を生成します。このとき、Itr の 3 つのパラメータが初期化されます。

    Java ArrayList を走査するときに要素を削除するために foreach と iterator を使用することの違いは何ですか?

    現時点では、expectedModCount == modCount == 2 (リストが add メソッドを動員しているため、add メソッドは modCount に対する操作を実装します)
    2 番目の文は、以下の hasNext() メソッドを呼び出して、次の添字を返します。アクセスされる次の要素 カーソル、これは最初のループであるため、カーソルは 0 で、サイズは 2 (0 != 2 true)です。
    next() メソッドは 3 番目の文で呼び出され、 foreach ループ メソッド本体の削除メソッドの条件が満たされていない場合、サイクルが終了します。

    2 回目

    2 番目の文は hasNext() を呼び出します。 2 番目のループでは、カーソルは 1 ですが、
    size は 2 (1 != 2 true) のままです。
    3 番目の文は、next() メソッドを呼び出します。 , 通常通り値を取得し、最初の要素「2」を取得します;
    文④はremove()メソッドを呼び出し、リストから要素を削除することに成功します。 Remove メソッドを呼び出すときは、modCount があることに注意してください。現時点では、modCount3、expectedModCount2、size1

    3回目

    2番目の文は、以下のhasNext()メソッドを呼び出し、次の要素の添え字カーソルを返します。 、2 番目のループなので、カーソルは 2、サイズは 1 です。
    3 番目の文は next() メソッドを呼び出します。next() メソッドの最初の文は checkForComodification(); を呼び出すことに注意してください。 modCount(3)! = ExpectedModCount(2) のため、例外がスローされました。

    3. イテレータが最下層である理由、foreach がエラーを報告する理由

    Java ArrayList を走査するときに要素を削除するために foreach と iterator を使用することの違いは何ですか?

    ループが終了すると、while (iterator.hasNext() ) は次の要素が存在するかどうかを確認します。remove delete 2 が完了した後、次にカーソルを入力するときは 1 のままで、サイズも 1 です。
    Foreach、remove2 を削除した後、次にカーソルを入力するときは 2 です。 、サイズは 1 であるため、false を返すには、次のメソッドに進み、modCount=3 と ExpectedModCount=2

    Java ArrayList を走査するときに要素を削除するために foreach と iterator を使用することの違いは何ですか?

    Java ArrayList を走査するときに要素を削除するために foreach と iterator を使用することの違いは何ですか?

    を確認します。

    3. ソース コード メソッドを表示します。

    イテレータの下の ArrayList を表示する場合

    Java ArrayList を走査するときに要素を削除するために foreach と iterator を使用することの違いは何ですか?

    以上がJava ArrayList を走査するときに要素を削除するために foreach と iterator を使用することの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

    ホットAIツール

    Undresser.AI Undress

    Undresser.AI Undress

    リアルなヌード写真を作成する AI 搭載アプリ

    AI Clothes Remover

    AI Clothes Remover

    写真から衣服を削除するオンライン AI ツール。

    Undress AI Tool

    Undress AI Tool

    脱衣画像を無料で

    Clothoff.io

    Clothoff.io

    AI衣類リムーバー

    AI Hentai Generator

    AI Hentai Generator

    AIヘンタイを無料で生成します。

    ホットツール

    メモ帳++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:28 PM

    Java における完全数のガイド。ここでは、定義、Java で完全数を確認する方法、コード実装の例について説明します。

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

    Java の乱数ジェネレーターのガイド。ここでは、Java の関数について例を挙げて説明し、2 つの異なるジェネレーターについて例を挙げて説明します。

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

    Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

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

    Java のスミス番号のガイド。ここでは定義、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 APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

    Java での日付までのタイムスタンプ Java での日付までのタイムスタンプ Aug 30, 2024 pm 04:28 PM

    Java での日付までのタイムスタンプに関するガイド。ここでは、Java でタイムスタンプを日付に変換する方法とその概要について、例とともに説明します。

    カプセルの量を見つけるためのJavaプログラム カプセルの量を見つけるためのJavaプログラム Feb 07, 2025 am 11:37 AM

    カプセルは3次元の幾何学的図形で、両端にシリンダーと半球で構成されています。カプセルの体積は、シリンダーの体積と両端に半球の体積を追加することで計算できます。このチュートリアルでは、さまざまな方法を使用して、Javaの特定のカプセルの体積を計算する方法について説明します。 カプセルボリュームフォーミュラ カプセルボリュームの式は次のとおりです。 カプセル体積=円筒形の体積2つの半球体積 で、 R:半球の半径。 H:シリンダーの高さ(半球を除く)。 例1 入力 RADIUS = 5ユニット 高さ= 10単位 出力 ボリューム= 1570.8立方ユニット 説明する 式を使用してボリュームを計算します。 ボリューム=π×R2×H(4

    See all articles