1。概要のために拡張
foreachループとも呼ばれるループ用の拡張は、アレイとコンテナ(コレクションクラス)を通過するために使用されます。 ArrayとCollection要素をループするためにForeachを使用する場合、アレイとコレクションの長さを取得する必要はなく、インデックスに基づいて配列要素と収集要素にアクセスする必要はありません。これにより、効率が大幅に向上し、コードがはるかに簡単です。
2。Oracle公式ウェブサイトの説明
それでは、いつのループを使用する必要がありますか?いつでもできる。それは本当にあなたのコードを美しいです。残念ながら、どこでも使用することはできません。たとえば、Expurgateメソッドを検討してください。プログラムは、現在の要素を削除するためにイテレーターにアクセスする必要があります。 for-eachループはイテレーターを隠しているため、削除を呼び出すことはできません。したがって、for-forループはフィルタリングに使用できません。同様に、リストまたは配列内の要素をトラバースするときに交換する必要があるループには使用できません。最後に、複数のコレクションを並行して反復する必要があるループには使用できません。これらの欠点はデザイナーによって知られていました。デザイナーは、大多数のケースをカバーする清潔でシンプルな構成要素を使用するという意識の決定を下しました。
それでは、いつのループを使用する必要がありますか?いつでも大丈夫です。これは本当にあなたのコードを美化します。残念ながら、どこにも使用することはできません。これらの状況、たとえば削除方法を考慮してください。現在の要素を削除するために、プログラムはイテレーターにアクセスする必要があります。 for-for-op-loopはiteratorを隠しているため、削除関数を呼び出すことはできません。したがって、for-eachループは、フィルタリング要素には適していません。また、コレクションまたは配列を繰り返すときに要素を交換する必要があるループは適用されません。最後に、複数のコレクションの反復での並列ループの使用には適していません。デザイナーは、これらの欠陥を理解し、これらの状況を回避するために、きれいでシンプルな構造を意識的に設計する必要があります。興味がある場合は、公式WebサイトのAPIを表示できます。公式WebサイトでAPIを見つける方法がわからない場合は、[公式Webサイト]をクリックしてAPIメソッドを表示してください。
3.フォーマットを強化します
for(コレクションまたは配列要素の変数名:コレクションオブジェクトまたは配列オブジェクト){javaステートメント変数名;}公式ウェブサイトの説明:
for(timertask t:c)
T.Cancel();
あなたがコロンを見るとき(:)それを「in」として読みます。上のループは、「cの各ティマタスクtについて」と読みます。ご覧のとおり、for-for-for-constructはジェネリックと美しく組み合わされています。残りのクラッターを除去しながら、すべてのタイプの安全性を保存します。イテレーターを宣言する必要がないため、一般的な宣言を提供する必要はありません。 (コンパイラはあなたの背中の後ろであなたのためにこれを行いますが、あなたはそれに関心がある必要はありません。)
一般的な意味は次のとおりです。
コロン(:)が表示されると、「Come In」と表示されます。上記のループには、「cのすべてのTimertask要素を移動する」と書かれています。ご覧のとおり、for-for-for構造はジェネリックと完全に組み合わされています。残りの混乱を取り除きながら、あらゆる種類のセキュリティを保持します。イテレーターを宣言する必要がないため、一般的な宣言を提供する必要はありません。 (コンパイラがあなたの後ろにそれをやったので、あなたはそれを気にする必要はありません。)
簡単な体験:
1。トラバーサルアレイ用に拡張
パッケージcn.jason01; //トラバーサルアレイのパブリッククラスFortest01のために拡張{public static void main(string [] args){int [] array = {1,2,3}; for(int element:array){system.out.println(element); }}}2。トラバーサルコレクションの強化
パッケージcn.jason01; import java.util.arraylist; public class fortest {public static void main(string [] args){// generic Inference、string arraylist <string> array = new ArrayList() array.add( "a"); array.add( "b"); array.add( "c"); for(string string:array){system.out.println(string); }}}4
最初にコードを見てください
パッケージcn.jason01; import java.util.arraylist; Import java.util.iterator;/** *基礎となる原則 * * @author cassandra * @version 1.1 */public class fortest {public static void main(string [] args){// generic Incorenceを書くことができます。いくつかの仕様を書く必要があります。 ArrayList <String> array = new ArrayList(); // [要素] array.add( "a"); array.add( "b"); array.add( "c"); //実装システムの拡張。 IS、基礎となる実装原則system.out.println( "---逆コンパイル----"); string string; for(iterator iterator = array.iterator(); iterator.hasnext(); system.out.println(string)){string =(string)iterator.next();} // iteratorはsystem.out.println( "----------"); for(iterator <string> i = array.iterator(); i.hasnext(); system.out.println(i.next())){} // system.out.println( "---------"); for(int x = 0; x <array.size(); x ++){system.out.println(array.get(x));}}}}}上記のコードから、基礎となる層がイテレーターによって実装されており、実際にイテレーターを隠すための強化が行われることがわかります。そのため、自然コードはイテレーターを作成せずにはるかに簡単です。これが、コードを削減し、コレクションと配列の移動を促進し、効率を向上させるための強化が起動される理由でもあります。
注:皮を覆う場合、コレクションとアレイを横断するために強化を使用する場合、最初にnullであるかどうかを判断する必要があります。その理由は非常に簡単です。基礎となるレイヤーは、アレイまたはコレクションオブジェクトを使用してIterator()メソッドを呼び出してイテレーターを作成する必要があります(Iterator Iteratorはインターフェイスであるため、サブクラスで実装する必要があります)。それがnullの場合、例外は間違いなくスローされます。
5。の適用性と制限を強化します
1。適用可能性
コレクションとアレイの横断に適しています。
2。制限:
beudaly基礎となる層はイテレーターであるため、セットはnullになりません。
iterterterterteratorは隠されているため、コレクションを横断するときにコレクションを変更(追加および削除)できません。
Cannotセット角度マーク。
6。強化の使用の詳細な説明
1。配列の使用の強化
パッケージcn.jason05; Import java.util.arraylist; Import java.util.list;/** *拡張された使用 * * @author cassandra */public class fordemo {public static main(string [] args){// array int [] array = {1、2、3、4、5}; for(int x:arr){system.out.println(x); }}}2。コレクションの使用を強化します
パッケージcn.jason05; Import java.util.arraylist; Import Java.util.list;/** * endanced for usage * * @author cassandra */public class fordemo {public static void main(string [] args){//コレクションのarraylist <string> array> new arrylist < array.add( "hello"); array.add( "world"); array.add( "java"); for(string s:array){system.out.println(s); } //セットはnullです、nullpointerexception null pointer例外リスト<string> list = null; if(list!= null){for(string s:list){system.out.println(s); }} // forの要素の追加または変更を強化するには、(string x:array){if(array.contains( "java"))array.add(1、 "love")の同時に変更された例外を同時に変更しました。 }}3。ジェネリックと強化の完璧な組み合わせ
注:ジェネリックと完全に組み合わせる必要があります。そうしないと、手動で下向きに変換する必要があります。
1.一般的な効果はなく、強化を使用できません
学生クラス
パッケージcn.jason01;パブリッククラスの学生{private string name1;プライベート文字列name2; public Student(){super(); } public Student(string name1、string name2){super(); this.name1 = name1; this.name2 = name2; } public string getname1(){return name1; } public void setname1(string name1){this.name1 = name1; } public string getname2(){return name2; } public void setname2(string name2){this.name2 = name2; }}テストコード
パッケージcn.jason01; import java.util.arraylist; import java.util.iterator; import java.util.list; public class test02 {public static void main(string [] args){// set set 1 list1 = new Arraylist(); list1.add( "a"); list1.add( "b"); list1.add( "c"); //セット2リストリスト2 = new ArrayList(); list2.add( "d"); list2.add( "e"); list2.add( "f"); //セット3リストlist3 = new ArrayList(); //最初と2番目のセットをトラバースし、要素を追加して3を設定します(iterator i = list1.iterator(); i.hasnext();){// System.out.println(i.next()); string s =(string)i.next(); for(iterator j = list2.iterator(); j.hasnext();){// list2.add(new Student(s、j.next())); string ss =(string)j.next(); list3.add(new Student(S、SS)); }} //セット3をトラバースし、要素学生stを出力します。 for(iterator k = list3.iterator(); k.hasnext(); system.out .println(new StringBuilder()。append(stertgetname1())。append(st.getname2())){st =(sudents)k.next(); }}}上記のコードがコメントの2行を削除する場合、コレクションは要素のタイプを宣言しておらず、繰り返しは自然にそれがどんなタイプであるかを自然に宣言しないため、プログラムはエラーを報告します。したがって、ジェネリックがない場合は、下向きに変換する必要があります。なぜイテレーターは使用できず、機能強化ではありません。
2。ジェネリックと強化
上記のコードを変更します
パッケージcn.jason01; import java.util.arraylist; import java.util.iterator; import java.util.list;/** * forとgenerics * * @author cassandra */public class test03の完璧な組み合わせを強化list1.add( "a"); list1.add( "b"); list1.add( "c"); //セット2リスト<String> list2 = new ArrayList <String>(); list2.add( "d"); list2.add( "e"); list2.add( "f"); //セット3リスト<Student> list3 = new ArrayList <Student>(); ////最初のセットと2番目のセットをトラバースし、3つを設定するために要素を追加します(文字列S1:list1){for(string s2:list2){list3.add(new Student(s1、s2)); }} //(Student st:list3){system.out.println(new Stringbuilder()。append(stertname1())。append(stertname2()))の3つの出力要素と出力要素をraverseします。 }}}4。リストコレクショントラバーサルの4つの方法
コレクションインターフェイスにはIterator()メソッドがあり、Iteratorタイプを返し、イテレーターをイテレータとして持っています。リストにはListIterator()メソッドがあるため、追加のコレクションListITERATORがあります。サブクラスLinkedList、ArrayList、およびVectorはすべてリストとコレクションインターフェイスを実装するため、2つの反復器を使用してトラバースを使用できます。
コードテスト
パッケージcn.jason05; import java.util.arraylist; import java.util.iterator; import java.util.list; import java.util.listiterator;/***これらは、トラバースリストの4つの方法です。 * @author cassandra */public class fordemo01 {public static void main(string [] args){//コレクションリスト<string> list = new arraylist <string>(); list.add( "hello"); list.add( "world"); list.add( "Java"); //方法1、Iterator Iterator Traversal Iterator <String> i = list.iterator(); while(i.hasnext()){string s = i.next(); System.out.println(s); } //方法2、Listiterator Iterator Traversal Collection Listiterator <String> LT = List.Listiterator(); while(lt.hasnext()){string ss = lt.next(); System.out.println(ss); } //方法3、(int x = 0; x <list.size(); x ++){string sss = list.get(x); System.out.println(SSS); } //方法4、(string ssss:list){system.out.println(sss)のトラバーサルコレクションの拡張; }}}5. 2で収集トラバーサル法を設定します
セットコレクションにはget(int index)メソッドがないため、ループには普通はありません。セットにはlistiterator()メソッドはありませんので、listiteratorイテレーターはありません。したがって、トラバースする方法は2つしかありません。
コードテスト
パッケージcn.jason05; import java.util.hashset; import java.util.iterator; import java.util.set; public static void main(string [] args){set <string> set = new hashset <string>(); set.add( "hello"); set.add( "world"); set.add( "java"); //方法1、Iterator Iterator Iterator IT = set.iterator(); while(it.hasnext()){system.out.println(it.next()); } //方法2、(string s:set){system.out.println(s)のトラバーサルコレクションを拡張します。 }}}7。概要
1.の適用性と制限を強化します
適用性:コレクションとアレイのトラバーサルに適用できます。
制限:
beudaly基礎となる層はイテレーターであるため、セットはnullになりません。
②角度マークを設定できません。
iterterterterteratorは隠されているため、コレクションを横断するときにコレクションを変更(追加および削除することはできません)。
2。コレクション内のforとgenericsの組み合わせを強化することによってのみ、新機能の役割を再生できます。
3.公式ウェブサイトの新機能を表示することが非常に重要です。あなたは理由と理由を知っている必要があります。あなたの心の中でそれを知ることによってのみ、あなたはそれを自由に使うことができます。
上記の記事「Java New Feature」のforループの使用に関する最も完全な要約は、私があなたと共有するすべてのコンテンツです。参照を提供できることを願っています。wulin.comをもっとサポートできることを願っています。