2016-09-18 2 views
2

Java реализует класс стека с помощью Vector, почему? Хотя кажется, что Arraylist должен был стать лучшим выбором. Java хотел, чтобы Stack был потокобезопасным или обязательным для Stack вообще (что, на мой взгляд, не так), чтобы быть потокобезопасным или существует какая-либо другая теория использования Vector для реализации Stack в Java?Почему java.util.Stack реализован с использованием Vector и Not Arraylist

+0

Возможный дубликат [В чем разница между ArrayList и Vector?] (Http://stackoverflow.com/questions/2986296/what-are-the-differences-between-arraylist-and-vector) –

+1

Поскольку Stack и Вектор был введен в Java одновременно, в JDK 1.0, а ArrayList был введен позже, в JDK1.2 –

ответ

3

Stack и Vector присутствовали в JDK 1.0. ArrayList не был добавлен до JDK 1.2. Stack Наследование от Vector испечено в API, так что теперь его невозможно изменить.

Но это устаревший класс, так или иначе. Фиксирование не является приоритетом. собственный Javadoc рецензия Stack «s говорит:

Более полный и последовательный набор операций стека LIFO обеспечивается интерфейсом Deque и его реализации, которые должны быть использованы в предпочтении к этому классу. Например:

Deque<Integer> stack = new ArrayDeque<Integer>(); 
2

Я подозреваю, что это просто исторический. java.util.Stack существует с тех пор, как Java 1.0 и ArrayList не были введены до 1.2. Вектор был всем, что у них было в то время, чтобы реализовать его.

Почему бы не изменить его в 1.2? Ну, Sun и Oracle были осторожны, чтобы сделать Java обратно совместимым с течением времени, и это было бы потрясающим изменением для перехода от потокобезопасного к нет.

Смежные вопросы