Titel | Inhalt | Suchen | Index | DOC | Handbuch der Java-Programmierung, 7. Auflage |
<< | < | > | >> | API | Kapitel 15 - Collections I |
Die Klasse Vector aus dem Paket java.util ist die Java-Repräsentation einer linearen Liste. Die Liste kann Elemente beliebigen Typs enthalten und ihre Länge ist zur Laufzeit veränderbar. Vector erlaubt das Einfügen von Elementen an beliebiger Stelle und bietet sowohl sequenziellen als auch wahlfreien Zugriff auf die Elemente. Das JDK realisiert einen Vector als Array von Elementen des Typs Object. Daher sind Zugriffe auf vorhandene Elemente und das Durchlaufen der Liste schnelle Operationen. Löschungen und Einfügungen, die die interne Kapazität des Arrays überschreiten, sind dagegen relativ langsam, weil Teile des Arrays umkopiert werden müssen. In der Praxis können diese implementierungsspezifischen Details allerdings meist vernachlässigt werden und ein Vector kann als konkrete Implementierung einer linearen Liste angesehen werden.
Das Anlegen eines neuen Vektors kann mit Hilfe des parameterlosen Konstruktors erfolgen:
public Vector() |
java.util.Vector |
Nach dem Anlegen ist ein Vector zunächst leer, d.h., er enthält keine Elemente. Durch Aufruf von isEmpty kann geprüft werden, ob ein Vector leer ist; size liefert die Anzahl der Elemente:
public final boolean isEmpty() public final int size() |
java.util.Vector |
Elemente können an beliebiger Stelle in die Liste eingefügt werden. Ein Vector erlaubt die Speicherung beliebiger Objekttypen, denn die Einfüge- und Zugriffsmethoden arbeiten mit Instanzen der Klasse Object. Da jede Klasse letztlich aus Object abgeleitet ist, können auf diese Weise beliebige Objekte in die Liste eingefügt werden.
Leider ist der Zugriff auf die gespeicherten Elemente damit natürlich nicht typsicher. Der Compiler kann nicht wissen, welche Objekte an welcher Stelle im Vector gespeichert wurden, und geht daher davon aus, dass beim Zugriff auf Elemente eine Instanz der Klasse Object geliefert wird. Mit Hilfe des Typkonvertierungsoperators muss diese dann in das ursprüngliche Objekt zurückverwandelt werden. Die Verantwortung für die korrekte Typisierung liegt damit beim Entwickler. Mit Hilfe des Operators instanceof kann bei Bedarf zumindest eine Laufzeit-Typüberprüfung vorgeschaltet werden. In Abschnitt 16.8 werden wir einen Weg kennenlernen, typsichere Collections zu erstellen, die seit der J2SE 5.0 in Java zur Verfügung stehen. |
|
Neue Elemente können wahlweise am Ende des Vektors oder an einer beliebigen anderen Stelle eingefügt werden. Das Einfügen am Ende erfolgt mit der Methode addElement:
public void addElement(Object obj) |
java.util.Vector |
In diesem Fall wird das Objekt obj an das Ende der bisherigen Liste von Elementen angehängt.
Soll ein Element dagegen an einer beliebigen Stelle innerhalb der Liste eingefügt werden, ist die Methode insertElementAt zu verwenden:
public void insertElementAt(Obj obj, int index) throws ArrayIndexOutOfBoundsException |
java.util.Vector |
Diese Methode fügt das Objekt obj an der Position index in den Vektor ein. Alle bisher an dieser oder einer dahinterliegenden Position befindlichen Elemente werden um eine Position weitergeschoben.
Ein Vektor bietet sowohl sequenziellen als auch wahlfreien Zugriff auf seine Elemente. Für den sequenziellen Zugriff bietet es sich an, den im nachfolgenden Abschnitt beschriebenen Iterator zu verwenden. Der wahlfreie Zugriff erfolgt mit einer der Methoden firstElement, lastElement oder elementAt:
public Object firstElement() throws ArrayIndexOutOfBoundsException public Object lastElement() throws ArrayIndexOutOfBoundsException public Object elementAt(int index) throws ArrayIndexOutOfBoundsException |
java.util.Vector |
firstElement liefert das erste Element, lastElement das letzte. Mit Hilfe von elementAt wird auf das Element an Position index zugegriffen. Alle drei Methoden verursachen eine Ausnahme, wenn das gesuchte Element nicht vorhanden ist.
Für den sequenziellen Zugriff auf die Elemente des Vektors steht ein Iterator zur Verfügung. Ein Iterator ist eine Abstraktion für den aufeinanderfolgenden Zugriff auf alle Elemente einer komplexen Datenstruktur (siehe Abschnitt 11.4.5). Ein Iterator für die traditionellen Collection-Klassen wird in Java durch das Interface Enumeration zur Verfügung gestellt und deshalb in der Java-Welt oft auch als Enumerator bezeichnet.
Das Interface Enumeration besitzt die Methoden hasMoreElements und nextElement. Direkt nach der Initialisierung zeigt ein Enumeration-Objekt auf das erste Element der Aufzählung. Durch Aufruf von hasMoreElements kann geprüft werden, ob weitere Elemente in der Aufzählung enthalten sind, und nextElement setzt den internen Zeiger auf das nächste Element:
public boolean hasMoreElements() public Object nextElement() throws NoSuchElementException |
java.util.Enumeration |
In der Klasse Vector liefert die Methode elements einen Enumerator für alle Elemente, die sich im Vektor befinden:
public Enumeration elements() |
java.util.Enumeration |
Das folgende Beispiel verdeutlicht die Anwendung von elements:
001 /* Listing1501.java */ 002 003 import java.util.*; 004 005 public class Listing1501 006 { 007 public static void main(String[] args) 008 { 009 Vector v = new Vector(); 010 011 v.addElement("eins"); 012 v.addElement("drei"); 013 v.insertElementAt("zwei",1); 014 for (Enumeration el=v.elements(); el.hasMoreElements(); ) { 015 System.out.println((String)el.nextElement()); 016 } 017 } 018 } |
Listing1501.java |
Das Programm erzeugt einen Vector,
fügt die Werte »eins«, »zwei« und »drei«
ein und gibt sie anschließend auf dem Bildschirm aus:
eins
zwei
drei
Ein Enumerator ist immer dann nützlich, wenn die Elemente eines zusammengesetzten Datentyps nacheinander aufgezählt werden sollen. Enumeratoren werden in Java noch an verschiedenen anderen Stellen zur Verfügung gestellt, beispielsweise in den Klassen Hashtable oder StringTokenizer. |
|
Titel | Inhalt | Suchen | Index | DOC | Handbuch der Java-Programmierung, 7. Auflage, Addison Wesley, Version 7.0 |
<< | < | > | >> | API | © 1998, 2011 Guido Krüger & Heiko Hansen, http://www.javabuch.de |