1. für Übersicht verbessert
Verbessert für Schleifen, auch als Foreach Loop bezeichnet, wird verwendet, um Arrays und Container (Sammelklassen) zu durchqueren. Bei der Verwendung von Foreach, um Arrays und Sammelelemente zu durchqueren, müssen die Array- und Sammlungslänge nicht erhalten werden. Sie müssen nicht auf Arrayelemente und Sammelelemente basierend auf dem Index zugreifen, was die Effizienz erheblich verbessert und der Code viel einfacher ist.
2. Die Erklärung der offiziellen Oracle -Website
Wann sollten Sie die For-Each-Schleife verwenden? Jederzeit können Sie. Es ist wirklich schön Ihren Code. Leider können Sie es nicht überall verwenden. Betrachten Sie beispielsweise die Expurcate -Methode. Das Programm benötigt Zugriff auf den Iterator, um das aktuelle Element zu entfernen. Die For-Each-Schleife verbirgt den Iterator, sodass Sie das Entfernen nicht anrufen können. Daher kann die For-Each-Schleife nicht zum Filtern verwendet werden. In ähnlicher Weise ist es für Schleifen nicht verwendbar, in denen Sie Elemente in einer Liste oder einem Array ersetzen müssen, während Sie sie durchqueren. Schließlich ist es nicht für Schleifen verwendbar, die über mehrere Sammlungen parallel iterieren müssen. Diese Mängel waren den Designern bekannt, die eine Bewusstseinsentscheidung getroffen haben, um ein sauberes, einfaches Konstrukt zu treffen, das die große Mehrheit der Fälle abdecken würde.
Wann sollten Sie die For-Each-Schleife verwenden? Es ist jederzeit in Ordnung. Das verschönert Ihren Code wirklich. Leider können Sie es nirgendwo verwenden. Betrachten Sie diese Situationen beispielsweise die Löschmethode. Um das aktuelle Element zu entfernen, muss das Programm auf den Iterator zugreifen. Die For-Each-Schleife verbirgt den Iterator, sodass Sie die Löschfunktion nicht aufrufen können. Daher sind For-Each-Schleifen nicht zum Filtern von Elementen geeignet. Außerdem sind Schleifen, die Elemente beim Iterieren einer Sammlung oder einem Array ersetzen müssen, nicht anwendbar. Schließlich ist es nicht für die Verwendung von Parallelschleife in mehreren Sammlungs -Iterationen geeignet. Designer sollten diese Fehler verstehen und bewusst eine saubere, einfache Struktur entwerfen, um diese Situationen zu vermeiden. Wenn Sie interessiert sind, können Sie die API der offiziellen Website anzeigen. Wenn Sie nicht wissen, wie Sie die API auf der offiziellen Website finden, klicken Sie bitte, um die offizielle Website zu öffnen, um die API -Methode anzuzeigen.
3.. Verbessern Sie das Format für das Format
für (Typ variabler Name des Sammlung oder Array -Elements: Sammlungsobjekt oder Array -Objekt) {Java -Anweisung, auf die sich der variable Name verweist;}Offizielle Erklärung der Website:
für (timerTask t: c)
t.cancel ();
Wenn du den Dickdarm siehst (:) Lies ihn als "in". Die obige Schleife lautet als „für jeden Timertask in c“. Wie Sie sehen können, kombiniert sich das For-Each-Konstrukt wunderbar mit Generika. Es bewahrt die Art der Art und Entfernung der verbleibenden Unordnung. Da Sie den Iterator nicht deklarieren müssen, müssen Sie keine generische Erklärung dafür abgeben. (Der Compiler tut dies für Sie hinter Ihrem Rücken, aber Sie müssen sich nicht damit befassen.)
Die allgemeine Bedeutung ist:
Wenn Sie den Dickdarm sehen (:), lautet es "Komm rein". In der obigen Schleife heißt es "Jedes Timertask -Element in c" zu reisen. " Wie Sie sehen können, ist die For-Each-Struktur perfekt mit Generika kombiniert. Es behält alle Arten von Sicherheit bei, während die verbleibende Verwirrung entfernt wird. Da Sie den Iterator nicht deklarieren müssen, müssen Sie ihn nicht mit einer generischen Erklärung geben. (Der Compiler hat es hinter dir gemacht, du musst dich nicht darum kümmern.)
Eine einfache Erfahrung:
1. für Traversal -Arrays verbessert
Paket cn.jason01; // Verbessert für das Traversal Array Public Class Fortest01 {public static void main (String [] args) {int [] array = {1,2,3}; für (int element: array) {System.out.println (Element); }}}2. für Traversal -Sammlungen verbessert
Paket cn.jason01; import Java.util.ArrayList; öffentliche Klasse Fortest {public static void main (String [] args) {// Generische Inferenz können Sie String ArrayList <string> array = new ArrayList () schreiben oder nicht; array.add ("a"); array.add ("b"); array.add ("c"); für (String String: Array) {System.out.println (String); }}}V.
Schauen Sie sich zuerst den Code an
Paket cn.jason01; import Java.util.ArrayList; Import Java.util.iterator;/** * Verbessert für das zugrunde liegende Prinzip * * @author cassandra * @Version 1.1 */public class Fortest {public static void Main (String [] Argumente) {// Generische Inferenz, Sie können später oder nicht schreiben oder nicht. Einige Spezifikationen müssen geschrieben werden. ArrayList <string> array = new ArrayList (); // Element Array.add ("A"); Array.Add ("B"); Array.Add ("C"); // Verbesserung für die Implementierungssystem.out.println ("-----erweitert für ----"). IS, das zugrunde liegende Implementierungsprinzip-System.out.println ("--- Reverse Compile ----"); String String; für (iterator iterator = array.iterator (); iterator.hasnext (); System.out.println (String)) {String = (String) iterator.next ();} // Iterator implementiert system.out.println ("-----------"); für (iterator <string> i = array.iterator (); i.hasnext (); System.out.println (i.Next ()))) {} // gewöhnlich für die Implementierung von System.out.println ("-----------"); for (int x = 0; x <array.size (); x ++) {System.out.println (array.get (x));}}}Aus dem obigen Code können wir sehen, dass die zugrunde liegende Ebene von Iteratoren implementiert wird und die Verbesserung für den Iterator tatsächlich verbirgt, sodass der natürliche Code viel einfacher ist, ohne Iteratoren zu erstellen. Dies ist auch der Grund, warum die Verbesserung für die Verringerung des Codes, die Erleichterung des Durchlaufs von Sammlungen und Arrays und die Verbesserung der Effizienz ermöglichen.
HINWEIS: Da die Verbesserung der Iteratoren der Häute bei der Verbesserung von Kollektionen und Arrays eine Verbesserung verwendet, müssen Sie zunächst feststellen, ob es sich um Null handelt, sonst wird eine Null -Zeiger -Ausnahme ausgeworfen. Der Grund ist sehr einfach. Die zugrunde liegende Ebene muss ein Array- oder Sammlungsobjekt verwenden, um die Iterator () -Methode aufzurufen, um einen Iterator zu erstellen (der Iterator -Iterator ist eine Schnittstelle, die mit einer Unterklasse implementiert werden muss). Wenn es null ist, wird eine Ausnahme definitiv geworfen.
5. Verbessern Sie die Anwendbarkeit und Einschränkungen von für for
1. Anwendbarkeit
Geeignet für die Durchführung von Sammlungen und Arrays.
2. Einschränkungen:
① Der Satz kann nicht null sein, da die zugrunde liegende Schicht ein Iterator ist.
② Der Iterator ist versteckt, sodass die Sammlung beim Durchqueren der Sammlung nicht geändert (hinzugefügt und gelöscht) werden kann.
③Cannot -Setwinkelmarken.
6. Detaillierte Erklärung der Verwendung der Verbesserung für
1. Verbesserte Verwendung für in Arrays
Paket cn.jason05; Import Java.util.ArrayList; Import Java.util.list;/** * Verbessert für die Verwendung * * @author Cassandra */public class feDemo {public static void main (String [] args) {// Traverse the Array int [] arr = {1, 2, 4, 4, 4, 4, 4, 4, 4, 5}; für (int x: arr) {System.out.println (x); }}}2. Verbessern Sie die Verwendung von für in Sammlungen
Paket cn.jason05; import Java.util.ArrayList; Import Java.util.list;/** * Verbessert für die Verwendung * * @author cassandra */public class fedemo {public static void main (String [] args) {// taverse die Sammlung Arraylist <String> array = new Arraylist <string <string>; array.add ("Hallo"); Array.Add ("Welt"); array.add ("java"); für (String S: Array) {System.out.println (s); } // Das Set ist null, werfen Sie eine nullPointerexception null Zeiger -Ausnahmeliste <string> list = null; if (list! }} // Verbessern Sie die Addition oder Änderung von Elementen in für eine gleichzeitig modifizierte Ausnahme für (String x: array) {if (array.contains ("java") Array.add (1, "love"); }}3. Die perfekte Kombination aus Generika und Verbesserung für
Hinweis: Es muss perfekt mit Generika kombiniert werden, sonst müssen Sie sich manuell nach unten verwandeln.
1. Kein generischer Effekt, kann eine Verbesserung nicht verwenden
Schülerklasse
Paket cn.jason01; Student der öffentlichen Klasse {private String name1; private String 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; }}Testcode
Paket cn.jason01; import Java.util.ArrayList; import Java.util.iterator; import Java.util.List; public class test02 {public static void main (String [] args) {// set 1 listlist1 = new ArrayList (); list1.add ("a"); list1.add ("b"); list1.add ("c"); // set 2 listlist2 = new ArrayList (); list2.add ("D"); list2.add ("e"); list2.add ("f"); // Set drei Listenlisten set3 = new ArrayList (); // Überqueren Sie die ersten und zweiten Sätze und fügen Sie Elemente hinzu, um drei für (Iterator i = list1.iterator (); Hasnext ();) {// system.out.println (i.Next ()); String S = (String) I.Next (); für (Iterator j = list2.Iterator (); j.hasnext ();) {// list2.Add (neue Schüler (s, j.Next ()); String ss = (String) J.Next (); List3.Add (neue Schüler (s, ss)); }} // Überqueren Sie den Satz Drei und geben Sie das Element Student ST aus; für (Iterator K = list3.Iterator (); k.hasnext (); System.out .println (new StringBuilder (). Append (St.GetName1 ()). append (St.GetName2 ()))) {st = (student) k.next (); }}}Wenn der obige Code die beiden Zeilen des Kommentars beseitigt, meldet das Programm einen Fehler, da die Sammlung nicht erklärt, welcher Typ das Element ist und der Iterator natürlich nicht weiß, welcher Typ es ist. Wenn es also keine Generika gibt, müssen Sie sich nach unten verwandeln. Sie können nur Iteratoren verwenden, nicht Verbesserungen für.
2. Generika und Verbesserungen für
Ändern Sie den obigen Code
Paket cn.jason01; import Java.util.ArrayList; Import Java.util.iterator; Import Java.util.List;/** * Verbessern Sie die perfekte Kombination von für und Generika * * @Author Cassandra */public class test03 {public static void Main (String [] args) {// //). list1.add ("a"); list1.add ("b"); list1.add ("c"); // set 2 list <string> list2 = new ArrayList <string> (); list2.add ("D"); list2.add ("e"); list2.add ("f"); // Set drei List <Student> list3 = new ArrayList <Student> (). //// Überqueren Sie die ersten und zweiten Sätze und fügen Sie Elemente hinzu, um drei für (String S1: List1) {für (String S2: List2) {list3.add (neuer Schüler (S1, S2)); }} // Überqueren Sie die Set Three und Ausgabeelemente für (Student ST: List3) {System.out.println (neuer StringBuilder (). append (St.GetName1 ()). append (St.GetName2 ())); }}}4. Vier Methoden der Listensammlung durchquert
Es gibt die Iterator () -Methode in der Sammlungsschnittstelle, die den Iteratortyp zurückgibt und einen Iterator als Iterator hat. In der Liste befindet sich eine ListIterator () -Methode, daher befindet sich ein zusätzlicher Sammellistenliste. Seine Unterklassen LinkedList, ArrayList und Vector alle Implementierlisten- und Sammlungsschnittstellen, sodass Sie alle zwei Iteratoren verwenden können, um zu durchqueren.
Codestests
Paket cn.jason05; Import Java.util.ArrayList; Import Java.util.iterator; Import Java.util.List; Import Java.util.Listiterator;/*** Dies sind vier Methoden der Durchquerenliste. * @Author Cassandra */public class feDemo01 {public static void main (String [] args) {// Erstellen Sie eine Sammlungsliste <string> list = new ArrayList <string> (); list.add ("Hallo"); list.add ("Welt"); list.add ("java"); // Methode 1, Iterator Iterator Traversal Iterator <string> i = list.iterator (); while (i.hasnext ()) {string s = i.Next (); System.out.println (s); } // Methode 2, Listiterator Iterator Traversal Collection Listiterator <string> lt = list.listiterator (); while (lt.hasnext ()) {String ss = lt.Next (); System.out.println (SS); } // Methode 3, gewöhnlich für die Traversal -Sammlung für (int x = 0; x <list.size (); x ++) {String SSS = list.get (x); System.out.println (SSS); } // Methode 4, Verbesserung für die Traversal -Sammlung für (String SSS: Liste) {System.out.println (SSS); }}}5. Kollektion durchquerische Durchlaufmethode in 2
Da die SET -Sammlung keine GET -Methode (int -Index) enthält, gibt es keine gewöhnliche für die Schleife, es gibt keine Listiterator () -Methode im Set, sodass kein Listiterator -Iterator vorhanden ist. Es gibt also nur zwei Möglichkeiten, um durchzuführen.
Codestests
Paket cn.jason05; import java.util.hashset; import java.util.iterator; import Java.util.set; öffentliche Klasse Fortest03 {public static void main (String [] args) {set <string> set = new Hashset <string> (); set.add ("Hallo"); set.add ("Welt"); set.add ("java"); // Methode 1, Iterator Iterator Iterator it = set.iterator (); while (it.hasnext ()) {System.out.println (it.next ()); } // Methode 2, Verbesserung für die Traversalsammlung für (String S: set) {System.out.println (s); }}}7. Zusammenfassung
1. verbessern die Anwendbarkeit und Einschränkungen von für for
Anwendbarkeit: anwendbar auf Durchqueren von Sammlungen und Arrays.
Einschränkung:
① Der Satz kann nicht null sein, da die zugrunde liegende Schicht ein Iterator ist.
② Winkelmarke kann nicht eingestellt werden.
③Der Iterator ist versteckt, sodass die Sammlung beim Durchqueren der Sammlung nicht geändert (hinzugefügt und gelöscht) werden kann.
2. Nur durch Verbesserung der Kombination von für und Generika in der Sammlung kann die Rolle neuer Funktionen gespielt werden.
3.. Es ist sehr wichtig, die neuen Funktionen der offiziellen Website anzuzeigen. Sie müssen den Grund und den Grund kennen. Nur wenn Sie es in Ihrem Herzen kennen, können Sie es frei verwenden.
Die vollständigste Zusammenfassung der Nutzung der für die für die Schleife im obigen Artikel "Java New Features" sind alle Inhalte, die ich mit Ihnen teile. Ich hoffe, Sie können Ihnen eine Referenz geben und ich hoffe, Sie können wulin.com mehr unterstützen.