home  |  suche  |  kontakt/johner  |  institut 
studierende  |  tech-docs  |  mindmailer 

Bisher

Vor Java 5 war das Schreiben des Schleifenkopfs von For-Schleifen aufwendig:

package org.johner.java5;

import java.util.Vector;

public class Generics {
  public static void main (String[] args) {
    //1. Vector
    Vector studenten = new Vector();
    studenten.add(new Student("Gerd"123456));
    studenten.add(new Student("Gerd1"654321));
    
    for (int i = 0; i < studenten.size(); i++) {
      Student student = studenten.get(i);
      System.out.println("Studierende: " + student.getName());
    }
  }
}

For-Schleifen in Java 5

Seit Java 5 funktioniert die Schleife auch ohne Schleifenzähler und ist damit lesbarer. Die Syntax lautet

 

for (<Datentyp> <Variablenname> : <Name der Collection>) {...}

 

Damit läßt sich einfach über alle Collections sowie Schlüssel und Werte von Maps iterieren:

package org.johner.java5;

import java.util.Hashtable;
import java.util.Vector;

public class ForLoop {
  public static void main (String[] args) {
    //1. Vector
    Vector<Student> studenten = new Vector<Student>();
    studenten.add(new Student("Gerd"123456));
    studenten.add(new Student("Gerd1"654321));
    
    for (Student student : studenten) {
      System.out.println("Der Student heisst " + student.getName());
    }
    
    //2. Hashtable
    Hashtable<Integer, String> table = new Hashtable<Integer, String>();
    table.put(new Integer(0)"Gerd");
    table.put(new Integer(1)"Gerda");
    
    //2.a) Iterate over keys
    for (Integer i : table.keySet()) {
      System.out.println("The key is " + i);
    }
    
    //2.b) Iterate over values
    for (String v : table.values()) {
      System.out.println("the value is " + v);
    }
  }
}

Iteratoren in Java 5

Auch die Iteratoren lassen sich in Java 5 typisieren. Damit ist ein expliziter Cast nicht mehr notwendig Beispiel:

 

Alt:

 

Iterator iterator = vectorWithGCs.iterator();
Date date = ((GregorianCalendar)iterator.next()).getTime();

 

Neu:

 

Iterator<GregorianCalendar> iterator = vectorWithGCs.iterator();
Date date = iterator.next().getTime();

 

Analog der For-Schleife lassen sich auf diese Weise auch über Schlüssel und Werte von Maps iterieren.

package org.johner.java5;

import java.util.Hashtable;
import java.util.Iterator;
import java.util.Vector;

public class Iterating {
  public static void main (String[] args) {
    //1. Vector
    Vector<Student> studenten = new Vector<Student>();
    studenten.add(new Student("Gerd"123456));
    studenten.add(new Student("Gerda"654321));
    
    Iterator<Student> iterator1 = studenten.iterator();
    while (iterator1.hasNext()) {
      //old: Student student = (Student)iterator1.next();
      System.out.println("Student : " + iterator1.next().getName());
    }
    
    //2. Hashtable
    Hashtable<Integer, Student> table = 
      new Hashtable<Integer, Student>();
    table.put(new Integer(0)new Student("Gerd"123456));
    table.put(new Integer(1)new Student("Gerda"654321));
    
    //2.a) Iterate over keys
    Iterator<Integer> keyIterator = table.keySet().iterator();
    while (keyIterator.hasNext()) {
      System.out.println("Key: " + keyIterator.next());
    }
    
    //2.b) Iterate over values //Iterator<String> ginge nicht
    Iterator<Student> valueIterator = table.values().iterator();  
    while (valueIterator.hasNext()) {
      System.out.println("Value: " + valueIterator.next().getName());
    }
  }
}