Titel | Inhalt | Suchen | Index | DOC | Handbuch der Java-Programmierung, 3. Auflage
<< | < | > | >> | API | Kapitel 14 - Collections I

## 14.2 Die Klasse Vector

- 14.2 Die Klasse Vector
  - 14.2.1 Einfügen von Elementen
  - 14.2.2 Zugriff auf Elemente
  - 14.2.3 Der Vektor als Iterator

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 | DOC | Handbuch der Java-Programmierung, 3. Auflage, Addison Wesley, Version 3.0
<< | < | > | >> | API | © 1998-2002 Guido Krüger, http://www.javabuch.de