2016-03-06 3 views
0

Я знаю, что реализация виртуализации Java виртуализации - путем расширения Vector. По умолчанию синхронизируется вектор. Чтение Java документ, и он говорит, что для создания стеки,Как определить стек в Java

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

Поскольку я по отношению к новой Яве. Мой вопрос: это лучшая практика для определения стека в Java?

+0

спасибо @pczeus. Не уточняйте дублирование за отзыв, просто хочу подтвердить мое понимание практики Java. – user1861417

+0

Я думаю, что ArrayDeque - ваш лучший выбор. –

ответ

0

в целом (не зависит от языка), если вы хотите динамическую реализацию стека, реализация на основе Linked List обеспечивает хорошую и эффективную реализацию стека. Если вы не хотите динамической реализации, использование массивов также будет очень хорошей реализацией. В java Deque дает отличную производительность. ИЛИ если вы хотите, и альтернативы, вы также можете попробовать этот пример, который использует встроенный стек:

static void showpush(Stack st, int a) { 
     st.push(new Integer(a)); 
    //add appropriate print statements 
    } 

    static void showpop(Stack st) { 
     Integer a = (Integer) st.pop(); 
    //add appropriate print statements 
    } 

    public static void main(String args[]) { 
     Stack st = new Stack(); 
     showpush(st, 42); 
     showpush(st, 66); 
     showpush(st, 99); 
     showpop(st); 
     showpop(st); 
     showpop(st); 
    } 
+0

Я знаю, что это пример. два набора нитти: 1. Стек может быть лучше. 2. Нам не нужно снова делать автоматический бокс для нового Integer (a). Также реализация стека ужасна с точки зрения производительности. Посмотрите мой оригинальный вопрос. – user1861417

1

Читать Javadoc из Stack:

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

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

Даже Javadoc из Deque говорит, что это:

может также двусторонних очередей можно использовать в качестве LIFO (Last-In-First-Out) суммируется. Этот интерфейс следует использовать вместо старого Stack класса.

Является ли «лучшей практикой» следовать рекомендациям документации по java?
Да.

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