Erweiteres for (foreach) in Java 5

  • 7,947 views
Uploaded on

 

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
7,947
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
4
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide
  • #toc2

Transcript

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