Как реализован стек в Java? - PullRequest
0 голосов
/ 07 марта 2019

Я не спрашиваю, как реализовать стек в Java, но как класс стека реализуется Java?Использует ли он связанный список?Если это так, то, если я точно знаю, с какими элементами я буду иметь дело, не лучше ли имитировать стек с помощью массива, это будет быстрее, чем то, как Java реализует класс стека?

1 Ответ

1 голос
/ 07 марта 2019

Согласно https://docs.oracle.com/javase/7/docs/api/java/util/Stack.html класс стека получается следующим образом:

 java.lang.Object
    java.util.AbstractCollection<E>
        java.util.AbstractList<E>
            java.util.Vector<E>
                java.util.Stack<E>

Это означает, что стек - это больше, чем список (хотя он и один). Это вектор. Из векторного класса java-doc:

Класс Vector реализует растущий массив объектов. Как и массив, он содержит компоненты, к которым можно получить доступ с помощью целочисленного индекса. Однако размер вектора может увеличиваться или уменьшаться по мере необходимости для добавления и удаления элементов после создания вектора.

Но есть еще:

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

Синхронизированный означает дополнительную потерю эффективности (но обычно пренебрежимо малую).

Так что да, если вам нужна только функция «хранения», вы можете использовать массив и смещение для незначительного увеличения эффективности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...