# Was sollte ich benutzen Vektor oder ArrayList?



## Blase16 (22. Okt 2006)

Hallo,

ich brauche eine Liste in der Strings gespeichert werden. Dabei sollte beachtet werden das die die Liste entweder, eine feste Größe haben kann oder unendlich groß sein kann. Wenn die Liste eine Feste Größe hat, dann soll beim überschreiten des Limits der erste Eintrag gelöscht werden, der komplette Inhalt rutscht nach links und rechts wird wieder eingefügt. Auf die Liste soll nicht nur per index zugegriffen werden, sie soll auch nach dem Value durchsucht werden. Was sollte ich benutzen? Was ist von der Perfomance besser?

Ich habe momentan die Klasse Vektor genommen und erweitert:

```
package de.blase16.jajbof.src;

import java.text.DateFormat;
import java.util.Calendar;
import java.util.Collection;
import java.util.Vector;

public class History extends Vector {

    private int initialCapacity;
    private long lastUsedTime;
    private boolean limited;

    public History() {
	super();
	limited = false;
    }

    public History(int arg0) {
	super(arg0);
	limited = true;
	initialCapacity = arg0;
    }

    public void addMessage(String msg) {
	if (limited && elementCount == initialCapacity) {
		removeElementAt(0);
	}
	addElement(msg);
	lastUsedTime = System.currentTimeMillis();
    }

    public long lastUsed() {
	return lastUsedTime;
    }
}
```

Die Funktion addMessage wird benutzt um neue Elemte hinzufügen.

Gruß
Blase16


----------



## Beni (22. Okt 2006)

Wenn du vorne löschst, sind alle Listen die auf einem Array basieren ungeeignet. Eine LinkedList (bzw. eine Queue) wäre besser.


----------



## Blase16 (22. Okt 2006)

Ja aber das Problem ist doch, dass ich per Index auf die Strings zugreifen muss und das dauert doch sehr lange in einer LinkedList.


----------



## Beni (22. Okt 2006)

Was geschieht denn öfters? Wenn du oft schreibst -> LinkedList. Wenn du die ganze Zeit liest -> ArrayList.

Vergiss nicht, dass wenn du den ersten Eintrag löschst, _alle_ anderen Einträge kopiert werden müssen.


----------



## Blase16 (22. Okt 2006)

Was ist den besser wenn ich nach dem Value, nicht nach dem Index suche?


----------



## Ark (22. Okt 2006)

Was soll denn dabei rauskommen, wenn Du nach dem Wert suchst?

Ich würde eine ArrayList<String> anlegen, wo die Strings reinkommen, und eine HashMap<String,Integer>, die den Index auf diesen String in der Liste als Wert enthält.

Wobei mir noch nicht ganz klar ist, wozu man das braucht, was ich gerade geschrieben habe. *g*

MfG
Ark


----------

