Хотя это было задано некоторое время назад, возможно, было бы целесообразно предоставить ответ JDK6 +, который теперь предоставляет интерфейс Deque (deck), который реализуется структурой данных ArrayDeque и LinkedList был обновлен для реализации этого интерфейса. Также существуют специализированные формы для одновременного доступа, которые реализуются ConcurrentLinkedDeque и LinkedBlockingDeque .
Единственное, что замечательно в deque, это то, что он обеспечивает поддержку как LIFO (стек), так и FIFO (очередь), так как это может привести к путанице в отношении того, какие методы предназначены для операций очереди, а какие - для операций со стеком для новичков. *
ИМХО, JDK должен иметь интерфейс Stack
и интерфейс Queue
, которые могут быть реализованы аналогично ArrayDeque , но предоставляют только подмножество методов, требуемых для этой структуры, то есть LIFO можно определить pop()
, push()
и peek()
, а затем в контексте
LIFO<String> stack = new ArrayDeque<>();
выставляются только операции со стеком, что останавливает случайного вызова add (E) , когда push (E) было предназначено.