Titel   Inhalt   Suchen   Index   API  Go To Java 2, Zweite Auflage, Handbuch der Java-Programmierung
 <<    <     >    >>  Kapitel 14 - Collections I

14.2 Die Klasse Vector



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 sequentiellen 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.

14.2.1 Einfügen von Elementen

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, daß beim Zugriff auf Elemente eine Instanz der Klasse Object geliefert wird. Mit Hilfe des Typkonvertierungsoperators muß diese dann in das ursprüngliche Objekt zurückverwandelt werden. Die Verantwortung für korrekte Typisierung liegt damit beim Entwickler. Mit Hilfe des Operators instanceof kann bei Bedarf zumindest eine Laufzeit-Typüberprüfung vorgeschaltet werden.

 Warnung 

Neue Elemente können wahlweise an das 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.

14.2.2 Zugriff auf Elemente

Ein Vektor bietet sowohl sequentiellen als auch wahlfreien Zugriff auf seine Elemente. Für den sequentiellen 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.

14.2.3 Der Vektor als Iterator

Für den sequentiellen 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 10.3.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. 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 /* Listing1401.java */
002 
003 import java.util.*;
004 
005 public class Listing1401
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 }
Listing1401.java
Listing 14.1: Die Methode elements der Klasse Vector

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.

 Tip 


 Titel   Inhalt   Suchen   Index   API  Go To Java 2, Zweite Auflage, Addison Wesley, Version 2.0
 <<    <     >    >>  © 2000 Guido Krüger, http://www.gkrueger.com