(1) 要素のトラバース
まず、例としてコードを見てみましょう:
String[] array = {"1", "2", "3"}; for (String i : array) { System.out.println(i); } ArrayList<String> list = new ArrayList<>(); list.add("111"); list.add("222"); list.add("333"); for (String i : list) { System.out.println(i); }
トラバース後の結果は次のとおりです:
1
2
3
111
222
333
結果は疑いの余地がありません。
コンパイルされたソース コードを見てみましょう (アイデアは付属しています。ターゲット パッケージ内のクラス ソース コード ファイルを開くだけです):
String[] array = new String[]{"1", "2", "3"}; String[] var2 = array; int var3 = array.length; for(int var4 = 0; var4 < var3; ++var4) { String i = var2[var4]; System.out.println(i); } ArrayList<String> list = new ArrayList(); list.add("111"); list.add("222"); list.add("333"); Iterator var7 = list.iterator(); while(var7.hasNext()) { String i = (String)var7.next(); System.out.println(i); }
元の for ループが次の目的で使用されていることがわかります。配列を走査し、コレクションには Iterator が使用されます。
(2) 要素の削除
なんと!次に要素を削除します:
使用 for ループ:
ArrayList<String> list = new ArrayList<>(); list.add("111"); list.add("222"); list.add("333"); log.info(list.toString()); for (int i = 0; i <list.size(); i++) { list.remove("222"); } log.info(list.toString());
結果:
11:11:52.532 [main] INFO com.xiaolinge.com.hello.HelloWord - [ 111, 222, 333]
11:11:52.539 [main] INFO com.xiaolinge.com.hello.HelloWord - [111, 333]
明らかに成功しました。
foreach の使用:
ArrayList<String> list = new ArrayList<>(); list.add("111"); list.add("222"); list.add("333"); log.info(list.toString()); for (String i : list) { list.remove("222"); } log.info(list.toString());
結果:
11:50:48.333 [main] INFO com.xiaolinge.com.hello.HelloWord - [111, 222, 333]
スレッド「メイン」で例外が発生しました java.util.ConcurrentModificationException
java.util.ArrayList$Itr.checkForComodification(ArrayList.java:909)
java.util.ArrayList$Itr.next(ArrayList. java:859)
com.xiaolinge.com.hello.HelloWord.main(HelloWord.java:30)
明らかに成功しませんでした。
理由:
イテレータ内の各反復では、List 内の modcount が期待値として記録され、各ループ内で期待値と List のメンバー変数 modCount が比較されますが、通常の list.remove は List の削除を呼び出しますが、このとき modcount を使用していますが、イテレータに記録されている期待値 = が変化していないため、エラーが報告されます。
要素を削除したい場合は、イテレータ内で削除メソッドを使用する必要があります:
ArrayList<String> list = new ArrayList<>(); list.add("111"); list.add("222"); list.add("333"); log.info(list.toString()); Iterator<String> it = list.iterator(); while (it.hasNext()){ String next = it.next(); //if外使用list的remove方法还是会报错的 if(next.equals("222")){ it.remove();//这里使用的是迭代器里面的remove()方法, // 当然如果使用list的remove方法在此删除质地感元素的话是成功的,比如:list.remove("222") } } log.info(list.toString());
結果:
#(3 ) オリジナルを使用して要素 を変更します:12:06:14.042 [main] INFO com .xiaolinge.com .hello.HelloWord - [111, 222, 333]
12:06:14.046 [メイン] 情報 com.xiaolinge.com.hello.HelloWord - [111, 333]
ArrayList<String> list = new ArrayList<>(); list.add("111"); list.add("222"); list.add("333"); log.info(list.toString()); for (int i = 0; i <list.size(); i++) { list.set(i,"444"); } log.info(list.toString());結果:
12:12:56.910 [main] INFO com.xiaolinge.com。 hello.HelloWord - [111, 222, 333]ああ私の!要素は変更できます; foreach の使用:12:12:56.915 [メイン] 情報 com.xiaolinge.com.hello.HelloWord - [444, 444, 444]
ArrayList<String> list = new ArrayList<>(); list.add("111"); list.add("222"); list.add("333"); log.info(list.toString()); for (String i : list) { i="444"; } log.info(list.toString());結果:
12:34:47.207 [main] INFO com.xiaolinge.com.hello.HelloWord - [111, 222, 333]ほら、いいえ、ああ。12:34:47.211 [メイン] 情報 com.xiaolinge.com.hello.HelloWord - [111, 222, 333]
どういうことですか? 要素を変更することはできませんが、要素の属性を変更することは可能ですか?見てみましょう。
public class Student { private int age; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } private String name; public Student(){}; public Student(int age,String name){ this.age=age; this.name=name; } }ああ、次のテスト コード:
Student student=new Student(1,"huge"); Student student1=new Student(1,"xiaoyao"); List<Student> studentList=new ArrayList<Student>(); studentList.add(student); studentList.add(student1); System.out.println(student.getName()); System.out.println(student1.getName()); for(Student stu:studentList) { stu.setName("jingtian"); } System.out.println(student.getName()); System.out.println(student1.getName());結果:
huge484 はすごいですね!オブジェクトは変更できませんが、オブジェクトのプロパティは変更できます。xiaoyao
jingtian
jingtian
以上がJavaのforループとforeachループの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

jvm'sperformanceiscompetitivewitherruntimes、sped、safety、andproductivityの提供

javaachievesplatformedentenceTheThejavavirtualMachine(JVM)、avainwithcodetorunonanyplatformwithajvm.1)codescompiledintobytecode、notmachine-specificcode.2)

thejvmisanabstractcomputingMachineCrucialForrunningJavaProgramsDuetoitsPlatForm-IndopentInterChitecture.Itincludes:1)ClassLoaderForloadingClasses、2)Runtimedataareaforforforatastorage、3)executionEngineWithinterter、Jitcompiler、およびGarbagecolfecolfecolfececolfecolfer

jvmhasacloserelationshiptheosasittrantesjavabytecodecodecodecodecodecodecodecodecodecodecodecodecodetructions、manageSmemory、およびhandlesgarbagecollection.thisrelationshipallowsjavatorunonvariousosenvirnments、Butalsedentsはspeedifediferentjvmbeviorhiorsandosendisfredediferentjvmbehbehioorysando

Javaの実装「Write and、Run Everywherewhere」はBytecodeにコンパイルされ、Java仮想マシン(JVM)で実行されます。 1)Javaコードを書き、それをByteCodeにコンパイルします。 2)JVMがインストールされたプラットフォームでByteCodeが実行されます。 3)Javaネイティブインターフェイス(JNI)を使用して、プラットフォーム固有の機能を処理します。 JVMの一貫性やプラットフォーム固有のライブラリの使用などの課題にもかかわらず、Woraは開発効率と展開の柔軟性を大幅に向上させます。

javaachievesplatformentenceTheTheTheJavavirtualMachine(JVM)、CodetorunondifferentoperatingSystemswithOutModification.thejvmcompilesjavacodeplatform-IndopentedbyTecodeを承認することを許可します

javaispowerfulfulduetoitsplatformindepentence、object-orientednature、richstandardlibrary、performancecapability、andstrongsecurityfeatures.1)platformendependenceallowseplicationStorunonaydevicesupportingjava.2)オブジェクト指向のプログラマン型

上位のJava関数には、次のものが含まれます。1)オブジェクト指向プログラミング、サポートポリ型、コードの柔軟性と保守性の向上。 2)例外処理メカニズム、トライキャッチ式ブロックによるコードの堅牢性の向上。 3)ゴミ収集、メモリ管理の簡素化。 4)ジェネリック、タイプの安全性の向上。 5)コードをより簡潔で表現力豊かにするためのAMBDAの表現と機能的なプログラミング。 6)最適化されたデータ構造とアルゴリズムを提供するリッチ標準ライブラリ。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

Dreamweaver Mac版
ビジュアル Web 開発ツール

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

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

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

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。
