Благодаря классам реализующим Queue
можно создавать массивы реализующие очередь.
Что такое очередь?
Очередь работает по принципу FIFO – first in first out (первый пришел – первым ушел). Представьте массив в который элементы можно добавлять только по очереди в конец, то есть после самого последнего элемента массива который был туда добавлен, а удалять элементы можно только по очереди начиная с самого первого элемента массива который мы туда добавили. То есть как видим первый вошедший в массив будет удален оттуда первым. Это и есть очередь.
Правда мы уже рассматривали LinkedList
, который тоже реализует очередь (FIFO).
Помним, что если у LinkedList вызвать метод add
, то элемент добавиться в конец LinkedList, если же вызвать просто remove
без аргументов, то удалиться элемент, который был добавлен в очередь наиболее давно.
То есть, очевидно, что это реализация очереди.
У ArrayList, например, нельзя вызвать remove без аргументов, поэтому ArrayList не является реализацией очереди.
У Queue же есть более интересные реализации очереди, например, приоритетная очередь – PriorityQueue
.
При добавлении элемента в конец массива элементы в нем еще и сортируются по приоритету.
Приоритет задан по умолчанию у некоторых типов.
То есть если, например, массив PriorityQueue хранит Integer числа, то при добавлении числа в него будет происходить сортировка массива так, чтобы все элементы массива располагались в массиве от большего числа к меньшему.
При выборке же элемента из приоритетной очереди, будет происходить выборка элементов с того конца массива, где наименьшее число.
PriorityQueue
Пример программы:
Вывод:

Как можно увидеть по результатам, удаление происходит от меньшего числа к большему.
Table of Contents
Интерфейс Map в Java
Разберитесь с HashMap, TreeMap и LinkedHashMap: хранение пар ключ-значение, сортировка по ключу и принцип работы hash-коллекций. Практические примеры.
Интерфейс Set в Java
Изучите HashSet, TreeSet и LinkedHashSet в Java: как хранить только уникальные элементы, сортировать их и сохранять порядок вставки. Примеры кода.
Потоки ввода/вывода. PrintWriter и PrintStream
Разбираем PrintWriter и PrintStream в Java: в чем разница, когда использовать. Примеры вывода данных в консоль с помощью этих потоков.