Java.util.Vector - альтернативы

Раньше я всегда думал, что вектор хорош для использования для объектов без описания, когда длина неизвестна. Насколько мне известно, я думал, что это тоже потокобезопасно

Что изменит, что Vector больше не нужно использовать, и что альтернатива?

Ответ 1

Вы должны использовать ArrayList вместо Vector. Vector используется внутренняя синхронизация, но это редко бывает достаточно для реальной согласованности и только замедляет выполнение, когда это действительно не требуется.

Также см. fooobar.com/questions/297/....

Ответ 2

Вместо этого вы можете использовать ArrayList.

Если вам нужна синхронизированная версия, вы можете сделать что-то вроде:

ArrayList arrayList = new ArrayList();

List synchList = Collections.synchronizedList(arrayList);

Ответ 3

ArrayList теперь лучший класс для использования. Vector теперь считается устаревшим и имеет дополнительные служебные накладные расходы на Thread-Safe.

Ответ 4

Используйте ArrayList, когда вам нужна реализация List, но не нужна безопасность потоков, и используйте CopyOnWriteArrayList, когда вам нужна реализация List, которая является потокобезопасной.

Ответ 5

Vector - это класс устаревшей коллекции из Java 1.0. В Java 1.2 (давно!) Была добавлена ​​Collections Framework, которая включала новые классы коллекций, такие как ArrayList и HashMap, которые были предназначенный для замены устаревших классов Vector и Hashtable.

Как уже говорилось ранее, классы устаревшей коллекции имели встроенную синхронизацию, что не требуется для многих приложений. Синхронизация имеет накладные расходы, поэтому, если это не обязательно, вы не должны использовать ее.

В некоторых случаях (когда ваша программа многопоточная, а несколько потоков обращаются к тем же данным), вам необходимо синхронизировать свои коллекции. Затем некоторые люди будут использовать старые классы Vector или Hashtable, но лучший способ - использовать оболочку синхронизации, например, 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);

Дополнительную информацию см. в документации API Collections.synchronizedList() (и других методах).