Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
Erweitertes for
Erweitertes for für Arrays <ul><li>Der Durchlauf der Elemente eines Feldes mit Index sieht üblicherweise so aus; </li></ul...
Erweitertes for für Collections <ul><li>Die for-Schleife zum Iterieren über Elemente einer  java.util.Collection  sieht im...
Grenzen vom erweiterten for <ul><li>Auf die Elemente – sei es Feldelemente oder Elemente der  Collection  – kann nur lesen...
Die Schnittstelle Iterable  <ul><li>Rechts vom Doppelpunkt des erweiteren for steht ein Objekt vom Typ  java.lang.Iterable...
Generische Deklaration und for <ul><li>Eine nicht mit Java 5 Generics deklarierte Liste kann nur mit dem Typ  Object  durc...
Performance-Probleme? <ul><li>Das erweiterte for soll eine  List<String> l  ablaufen: </li></ul><ul><li>for ( String s : l...
Durchlauf <ul><li>Das erweiterte for läuft die Collection über einen Standard-Iterator ab. </li></ul><ul><li>Da ein Iterat...
Nächste SlideShare
Wird geladen in …5
×

Erweiteres for (foreach) in Java 5

8.423 Aufrufe

Veröffentlicht am

Veröffentlicht in: Technologie
  • Als Erste(r) kommentieren

Erweiteres for (foreach) in Java 5

  1. 1. Erweitertes for
  2. 2. Erweitertes for für Arrays <ul><li>Der Durchlauf der Elemente eines Feldes mit Index sieht üblicherweise so aus; </li></ul><ul><li>for ( int i = 0; i < array.length; i++ ) { </li></ul><ul><li> int e = array[ i ]; </li></ul><ul><li> System.out.println( e ); </li></ul><ul><li>} </li></ul><ul><li>Die neue erweiterte for-Schleife (auch foreach genannt) ermöglicht ein Durchlaufen ohne sichtbaren Index: </li></ul><ul><li>for ( int e : array ) { </li></ul><ul><li> System.out.println( e ); </li></ul><ul><li>} </li></ul>
  3. 3. Erweitertes for für Collections <ul><li>Die for-Schleife zum Iterieren über Elemente einer java.util.Collection sieht im allgemeinen so aus: </li></ul><ul><li>for ( Iterator i = list.iterator(); i.hasNext(); ) </li></ul><ul><li>{ </li></ul><ul><li> Object o = i.next(); </li></ul><ul><li> ... </li></ul><ul><li>} </li></ul><ul><li>Kürzer geht das mit dem erweiterten for: </li></ul><ul><li>for ( Object o : list ) { </li></ul><ul><li> ... </li></ul><ul><li>} </li></ul>
  4. 4. Grenzen vom erweiterten for <ul><li>Auf die Elemente – sei es Feldelemente oder Elemente der Collection – kann nur lesend, aber nicht schreibend zugegriffen werden. </li></ul><ul><li>Bei einer Iteration beginnt es immer am Anfang und endet hinten. </li></ul><ul><ul><li>Man kann keinen Offset definieren. </li></ul></ul><ul><ul><li>Man kann nicht rückwärts von hinten nach vorne laufen. </li></ul></ul><ul><ul><li>Elemente lassen sich nicht überspringen. </li></ul></ul><ul><ul><li>Mit einem Index lassen sich nicht gleichzeitig zwei Datenstrukturen durchlaufen. </li></ul></ul><ul><ul><li>Ein normales break ist möglich und beendet die Schleife! </li></ul></ul>
  5. 5. Die Schnittstelle Iterable <ul><li>Rechts vom Doppelpunkt des erweiteren for steht ein Objekt vom Typ java.lang.Iterable : </li></ul><ul><li>package java.lang.Iterable; </li></ul><ul><li>public interface Iterable<T> { </li></ul><ul><li> public java.util.Iterator<T> iterator(); </li></ul><ul><li>} </li></ul><ul><li>Die Schnittstelle java.util.Collection erweitert Iterable . So können alle Datenstrukturen (außer Map ) rechts vom Doppelpunkt beim erweiterten for stehen. </li></ul><ul><li>List list = new ArrayList(); </li></ul><ul><li>for ( Object o : list ) </li></ul><ul><li> ... </li></ul><ul><li>Map und String implementieren Iterable nicht! </li></ul>
  6. 6. Generische Deklaration und for <ul><li>Eine nicht mit Java 5 Generics deklarierte Liste kann nur mit dem Typ Object durchlaufen werden. </li></ul><ul><li>List list = new ArrayList(); </li></ul><ul><li>for ( Object o : list ) </li></ul><ul><li> ... </li></ul><ul><li>Ist die Liste typisiert, kann der Typ spezialisiert sein: </li></ul><ul><li>List <String> list = new ArrayList <String> (); </li></ul><ul><li>for ( String o : list ) </li></ul><ul><li> ... </li></ul>
  7. 7. Performance-Probleme? <ul><li>Das erweiterte for soll eine List<String> l ablaufen: </li></ul><ul><li>for ( String s : list ) </li></ul><ul><li> System.out.println( s ); </li></ul><ul><li>Hieraus geniert der (Sun)-Compiler Programmcode, der über einen Iterator die Datenstruktur abläuft. </li></ul><ul><li>String s; </li></ul><ul><li>for (Iterator i$ = list.iterator(); i$.hasNext();) </li></ul><ul><li> System.out.println( (String) i$.next() ); </li></ul><ul><li>Im Fall einer LinkedList ist das Ablaufen mit einem Iterator am effizientesten, aber bei einer ArrayList ist get(index) etwas schneller. </li></ul><ul><ul><li>Wenn es auf absolute Performanz ankommt, sollte der Zugriff besser klassisch über get() erfolgen. </li></ul></ul>
  8. 8. Durchlauf <ul><li>Das erweiterte for läuft die Collection über einen Standard-Iterator ab. </li></ul><ul><li>Da ein Iterator parallele Änderungen überwacht, darf keiner im Hintergrund die Datenstruktur ändern. </li></ul><ul><ul><li>Das nennt sich fail-fast. Das Verhalten ist zum Beispiel bei der Klasse ArrayList dokumentiert. </li></ul></ul><ul><ul><li>Sonst gibt es eine Exception. </li></ul></ul>

×