Когда нам не нужна синхронизация, ArrayList быстрее, чем Vector. И когда нам нужна синхронизированная коллекция, нам лучше использовать обложек синхронизации (исправьте меня, если я ошибаюсь), или синхронизируя код только тогда, когда есть вызовы в этой коллекции. Существуют ли случаи, когда использование Vector является наилучшим вариантом?
Должен ли вектор быть устаревшим?
Ответ 1
В то время как в новом коде редко используется Vector
, нет необходимости настаивать на необходимости. Хотя новые классы коллекций превосходят, использование класса Vector
на самом деле ничего не сломает.
Кроме того, существуют ряд других стандартных Java-API, которые зависят от API Vector
, и, несомненно, сотни тысяч приложений клиента и сторонних разработчиков, которые также используют его.
В принципе, обесценивание Vector
будет излишне разрушительным. Нет необходимости подталкивать людей к изменению кода, который работает надежно, хотя бы медленнее.
Было предложено/подразумевать, что они могут отказаться от Vector
без (когда-либо) фактического удаления. Но проблема в том, что предупреждения об устаревании создают настоящую работу для реальных людей. Если это делается излишне, занятые люди начнут подавлять предупреждения по умолчанию. (Вспомните историю мальчика, который плакал волком....)
Ответ 2
Насколько я могу судить, использование Vector только для того, чтобы иметь базовый API, который зависит от него или среды выполнения до 1.2. Это также может быть приятным. Некоторые люди, как и векторы, потому, что они изначально использовали.
Я полагаю, что это может быть так, если вы ужасно забывчивы и не помните синхронизировать свой ArrayList.
Что-нибудь мне не хватает?
Ответ 3
Потому что есть много программ, которые используют Vector. Удаление вектора из jre означало бы, что все они будут сломаны. С другой стороны, используйте ArrayList или одну из других вложенных реализаций List, в зависимости от ваших потребностей.
Ответ 4
Проверить блокировку Elision в java, современные реализации JVM (Mustang) достаточно интеллектуальны, чтобы оптимизировать доступ к общим и не общим объектам. Оптимизация синхронизации в Мустанге
Итак, это не имеет значения (vector/arraylist с синхронизированным ключевым словом); но лишение приведет к слишком большому количеству предупреждений о компиляции: (