Согласно 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 синхронизируется.
Синхронизированный означает дополнительную потерю эффективности (но обычно пренебрежимо малую).
Так что да, если вам нужна только функция «хранения», вы можете использовать массив и смещение для незначительного увеличения эффективности.