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.367 Aufrufe

Veröffentlicht am

Veröffentlicht in: Technologie
0 Kommentare
1 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

Keine Downloads
Aufrufe
Aufrufe insgesamt
8.367
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
551
Aktionen
Geteilt
0
Downloads
4
Kommentare
0
Gefällt mir
1
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie
  • #toc2
  • 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>

    ×