• Save
Erweiteres for (foreach) in Java 5
Upcoming SlideShare
Loading in...5
×
 

Erweiteres for (foreach) in Java 5

on

  • 13,455 views

 

Statistics

Views

Total Views
13,455
Views on SlideShare
12,911
Embed Views
544

Actions

Likes
1
Downloads
4
Comments
0

7 Embeds 544

http://www.tutego.de 468
http://www.slideshare.net 47
http://tutego.de 13
http://www.tutego.com 12
http://webcache.googleusercontent.com 2
http://static.slidesharecdn.com 1
http://duckduckgo.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • #toc2

Erweiteres for (foreach) in Java 5 Erweiteres for (foreach) in Java 5 Presentation Transcript

  • Erweitertes for
  • 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 );
    • }
  • 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 ) {
    • ...
    • }
  • 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!
  • 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!
  • 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 )
    • ...
  • 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.
  • 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.