Должен ли вектор быть устаревшим?

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