junior
Stack считается устаревшим — чем его рекомендуют заменять и почему
Stack рекомендуют заменять на ArrayDeque. Stack устарел по нескольким причинам:
- Stack наследует Vector, а значит все его методы синхронизированы — лишние накладные расходы в однопоточном коде.
- Наследование от Vector нарушает абстракцию стека: через унаследованные методы можно обращаться к любому элементу по индексу, вставлять в середину и т.д. Стек должен предоставлять только push(), pop() и peek().
- Метод
push()в Stack не синхронизирован (вызываетaddElement()из Vector), создавая ложное ощущение потокобезопасности.
ArrayDeque не имеет этих проблем: нет синхронизации, нет произвольного доступа по индексу, реализован на кольцевом массиве (быстрее связного списка). Для использования как стека применяются методы push(), pop() и peek().
На собеседовании: назовите три причины: синхронизация, нарушение абстракции (наследование от Vector), ArrayDeque как замена. Покажите, что знаете, почему наследование Vector — это проблема.