Раньше я всегда думал, что вектор хорош для использования для объектов без описания, когда длина неизвестна. Насколько мне известно, я думал, что это тоже потокобезопасно
Что изменит, что Vector
больше не нужно использовать, и что альтернатива?
Раньше я всегда думал, что вектор хорош для использования для объектов без описания, когда длина неизвестна. Насколько мне известно, я думал, что это тоже потокобезопасно
Что изменит, что Vector
больше не нужно использовать, и что альтернатива?
Вы должны использовать ArrayList
вместо Vector
. Vector
используется внутренняя синхронизация, но это редко бывает достаточно для реальной согласованности и только замедляет выполнение, когда это действительно не требуется.
Также см. fooobar.com/questions/297/....
Вместо этого вы можете использовать ArrayList
.
Если вам нужна синхронизированная версия, вы можете сделать что-то вроде:
ArrayList arrayList = new ArrayList();
List synchList = Collections.synchronizedList(arrayList);
ArrayList
теперь лучший класс для использования. Vector
теперь считается устаревшим и имеет дополнительные служебные накладные расходы на Thread-Safe.
Используйте ArrayList
, когда вам нужна реализация List
, но не нужна безопасность потоков, и используйте CopyOnWriteArrayList
, когда вам нужна реализация List
, которая является потокобезопасной.
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()
(и других методах).