ArrayList vs Vector

schlseb

Mitglied
Hallo zusammen,

ich bin gerade beim Lesen eines Tutorials auf die ArrayList aufmerksam geworden. Bisher hab ich für vergleichbare Aufgaben immer einen Vector verwendet und deshalb gleich in der API nachgeschaut, was eigentlich der Unterschied zwischen beiden ist. Gefunden habe ich eine Erläuterung, dass die ArrayList eigentlich das Gleiche wie ein Vector ist, nur das sie im Unterschied zu diesem nicht synchronized ist.

Meine Frage wäre nun, wann man besser eine ArrayList und wann einen Vector verwenden sollte bzw. welchem Typ man generell den Vorzug mit welchen Ausnahmen geben sollte.

Neben diesem allgemeinen Problem beschäftigt mich die Verwendung einer Listenfunktion (ArrayList/Vector) mit der ich die Listener einer auslösenden Klasse festhalten möchte (void addXYEventListener() ). Welche der beiden Alternativen wäre in diesem speziellen Zusammenhang zu bevorzugen?

Danke schon mal vorab.
 
Noch ein kleiner Tipp dazu:

Am Besten immer gegen das Interface programmieren. Also List statt ArrayList oder Vector in allen Methodensignaturen verwenden. So ist es ohne Probleme möglich die Listen-Implementierung auszutauschen ohne es an x-Stellen ändern zu müssen.

Java:
public SomeSimpleClass {

     private List<String> stringList = new ArrayList<String>();
     
     public List<String> getStrings(){
         return Collections.unmodifiableList(stringList);
     }
}
 
OK, danke den Tipp. Den werde ich mir auf jeden Fall merken!
Kann das Problem mit den Threads auch auftreten, wenn ich gar nicht explicit damit arbeite (also keine Instanzen von Thread oder entsprechenden Subklassen erzeuge)?

Wenn ich in einem Programm die ArrayList verwende und erst zu einem späteren Zeitpunkt durch mehrere Threads zugreife - z.B. um eine zusätzliche Funktionalität einzubinden, die zunächst nicht geplant war - wie würde sich das Problem äußern? Wird eine Exception ausgegeben oder ergibt sich "nur" ein unerwünschtes Verhalten?
 
Wenn Du Glück hast, bekommst du irgendwann eine ConcurrentModificationException, meistens sind solche Fehler aber nur schwer zu finden - weil sie nie immer gleich auftreten. Beim ersten Aufruf wurde die eine Anweisung vor der anderen Anweisung ausgeführt, beim nächsten Aufruf wieder umgekehrt usw.

Darum empfiehlt sich ein gutes Logging, wo Du dann evtl. siehst, was wann wo und wie aufgerufen wurde.
 
Zurück