Vector
ist eine Legacy-Erfassungsklasse von Java 1.0. In Java 1.2 (vor langer Zeit!) Wurde die Collections Framework hinzugefügt, die neue Erfassungsklassen wie ArrayList
und HashMap
enthielt, die die Legacy-Klassen Vector
und Hashtable
ersetzen sollten.
Wie bereits erwähnt, verfügten die Legacy-Erfassungsklassen über eine integrierte Synchronisation, die für viele Anwendungen nicht erforderlich ist. Die Synchronisierung hat einen Leistungs-Overhead. Wenn dies nicht erforderlich ist, sollten Sie sie nicht verwenden.
In einigen Fällen (wenn Ihr Programm mehrere Threads verwendet und mehrere Threads auf dieselben Daten zugreifen) müssen Sie Ihre Sammlungen synchronisieren. Manche Leute würden dann mit den alten Vector
oder Hashtable
Klassen, aber eine bessere Art und Weise ist ein Synchronisations Wrapper verwenden zum Beispiel mit einem ArrayList
:
// Your standard, unsynchronized list
List<String> data = new ArrayList<String>();
// Use this to put it into a synchronization wrapper
List<String> syncedData = Collections.synchronizedList(data);
finden Sie in der API-Dokumentation von Collections.synchronizedList()
(und andere Methoden) für weitere Informationen.
Es ist seltsam, dass 'Vector' nicht veraltet ist. Ich nehme an, da es keinen Eins-zu-eins-Ersatz gibt, haben sie das nicht getan. – skaffman
Beachten Sie, dass dies auch für Hashtable gilt - verwenden Sie stattdessen HashMap. –
@skaffman 'CopyOnWriteArrayList' ist mehr oder weniger ein Eins-für-Eins-Ersatz, insofern es eine threadsafe 'List'-Implementierung ist. Für die meisten Verwendungen sollte 'CopyOnWriteArrayList' eine bessere Leistung als' Vector' bieten –