Это не должно быть вопросом

Никто не любит стоять в очереди¹. Большинство людей ненавидят тратить свое время в очереди. В ожидании своей очереди мы проводим в среднем 6 месяцев взрослой жизни - почти 3 дня в году. Есть книги об очередях. Документальные фильмы ². Даже академические знатоки в очередях. Но затем, когда мы пишем код, мы часто забываем использовать queues и вместо этого возимся с lists.

Все работает лучше, если вы используете правильный инструмент.

FIFO или LIFO1 !!!

Очередь в супермаркете - FIFO. Мы обычно складываем коробки - это LIFO. FIFO означает Первый Вход, первый ушел ³. LIFO - это аббревиатура от Последний вошел, первый ушел. Вот и все.

При реализации очередей FIFO мы обычно используем методы add, peek (возвращает, но не удаляет заголовок очереди) и poll (возвращает и удаляет заголовок очереди), в то время как мы ссылаемся на них соответственно, как push, peek и pop в стопках LIFO.

СТЕК, ОЧЕРЕДЬ и ДОРОГА

В stack мы можем добавлять и удалять элементы только с одного конца (LIFO), в queue мы добавляем элементы с одного конца и удаляем их с другого (FIFO) и , объединяя эти два мира, мы получаем deque (также известный как «Double Ended Queue»), где мы можем добавлять и удалять элементы с обоих концов. Ни один из них не допускает произвольный доступ к элементам.

В JAVA вы * должны * использовать deque для моделирования stack, потому что класс Stack считается устаревшим (он расширяет класс Vector и наследует все его методы, что позволяет нарушить принцип LIFO).

Так что не изобретайте велосипед ⁴.

[1] Хорошо, есть некоторые странные исключения :facepalm:
[2] Всегда есть альтернатива https://www.youtube.com/watch?v=ZyNz8UHHrxE (на испанском) :wink:
[ 3] Некоторым это известно как FCFS (Первым пришел, первым обслужен)
[4] И не забудьте дать LolaMarket шанс. Замечательный сервис!

Внешние ссылки 👀