Заменить устаревший стек чем-то из коллекций Java? - PullRequest
7 голосов
/ 27 ноября 2011

Возможно, это вопрос о пустяках Java.

Я много раз использовал реализацию Stack .

Я читал, что это считается устаревшим классом и из-за того, что он подклассов Vector ухудшает его производительность в однопоточных приложениях.

Мой вопрос: что является лучшей альтернативой среди классов Java Collection?

Существует ли другой класс Stack (возможно, под другим именем), который вы можете выбрать?

Я имею в виду, хорошо, реализовать стек вокруг другой существующей структуры данных легко, но я ожидаю, что есть существующий Stack для использования.

Ответы [ 6 ]

8 голосов
/ 27 ноября 2011

Если вы читаете более свежий Javadoc (например, 1.6 или 1.7), а не старые документы 1.4.2, вы найдете:

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

http://docs.oracle.com/javase/6/docs/api/java/util/Stack.html http://docs.oracle.com/javase/7/docs/api/java/util/Stack.html

2 голосов
/ 17 января 2014

В Java7 вы можете использовать

http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#asLifoQueue(java.util.Deque)

для получения стекового объекта.add () работает как push (), а remove () работает как pop () и т. д. Я отвечаю здесь задолго после того, как вопрос задан, потому что это новый «правильный» ответ на этот вопрос.

2 голосов
/ 27 ноября 2011

LinkedList реализует push и pop методы. См. Также другие реализации Deque .

Commons Collections реализует класс ArrayStack .

1 голос
/ 27 ноября 2011

Вы можете использовать LinkedList, который реализует интерфейс Deque и позволяет нажимать и выталкивать.

1 голос
/ 27 ноября 2011

Вы можете использовать Deque для добавления и удаления вещей с одного и того же конца.

0 голосов
/ 27 ноября 2011

Из стека Javadoc:

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

Deque stack = new ArrayDeque ();

...