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());
}
}
}
|
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);
}
}
}
|
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());
}
}
}
|