7

Почему классы Java Vector и Stack считаются устаревшими илиDeprecated?

25

Почему класс Java Vector считается устаревшим, ненадежным или депрецированным?

Не является ли его использование актуальным при работе с многопоточностью?

Если я не хочу вручную синхронизировать объекты и просто хочу использовать потокобезопасную коллекцию, не создавая новые копии базового массива (как это делает CopyOnWriteArrayList), то допустимо ли использовать Vector?

Что насчет Stack, который является подклассом Vector? Какую альтернативу я должен использовать вместо него?

2 ответ(ов)

0

Вектор (Vector) был частью версии 1.0 — изначальная реализация имела два недостатка:

1. Название: Векторы на самом деле представляют собой списки, к которым можно получить доступ как к массивам, поэтому их следовало бы назвать ArrayList (что является заменой Vector в коллекциях Java 1.2).

2. Конкурентность: Все методы get() и set() синхронизированы, что не позволяет вам осуществлять тонкую настройку синхронизации.

Разница между ArrayList и Vector незначительна, поэтому рекомендуется использовать именно ArrayList.

Согласно документации API:

По состоянию на платформу Java 2 v1.2 этот класс был модернизирован для реализации интерфейса List, что сделало его частью Java Collections Framework. В отличие от новых реализаций коллекций, Vector является синхронизированным.

0

Помимо уже упомянутых ответов о использовании Vector, существует ряд методов, связанных с перечислением и извлечением элементов, которые отличаются от интерфейса List. Разработчики, особенно те, кто изучал Java до версии 1.2, могут склоняться к их использованию, если они присутствуют в коде. Хотя enumerations (перечисления) работают быстрее, они не проверяют, была ли коллекция изменена во время итерации, что может вызвать проблемы. Поскольку Vector часто выбирается за его синхронизацию — с учетом одновременного доступа из нескольких потоков — это создает особенно серьезную проблему. Использование этих методов также значительно связывает код с Vector, что делает его замену на другую реализацию List довольно сложной задачей.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь