Интерфейс Queue в Java
Last updated: 5 мая 2025 г.Благодаря классам реализующим Queue
можно создавать массивы реализующие очередь.
Что такое очередь, FIFO?
Очередь работает по принципу FIFO – first in first out (первый пришел – первым ушел). Что же такое очередь? Представьте массив в который элементы можно добавлять только по очереди в конец, то есть после самого последнего элемента массива который был туда добавлен, а удалять элементы можно только по очереди начиная с самого первого элемента массива который мы туда добавили. То есть как видим первый вошедший в массив будет удален оттуда первым. Это и есть очередь.
Правда мы уже рассматривали LinkedList
, который тоже реализует очередь (FIFO).
Помним, что если у LinkedList вызвать метод add
, то элемент добавиться в конец LinkedList, если же вызвать просто remove
без аргументов, то удалиться элемент, который был добавлен в очередь наиболее давно.
То есть, очевидно, что это реализация очереди.
У ArrayList, например, нельзя вызвать remove без аргументов, поэтому ArrayList не является реализацией очереди.
У Queue же есть более интересные реализации очереди, например, приоритетная очередь – PriorityQueue
.
При добавлении элемента в конец массива элементы в нем еще и сортируются по приоритету.
Приоритет задан по умолчанию у некоторых типов.
То есть если, например, массив PriorityQueue хранит Integer числа, то при добавлении числа в него будет происходить сортировка массива так, чтобы все элементы массива располагались в массиве от большего числа к меньшему.
При выборке же элемента из приоритетной очереди, будет происходить выборка элементов с того конца массива, где наименьшее число.
PriorityQueue
Пример программы:
1import java.util.*;
2
3public class Queue {
4 public static void main(String[] args) {
5 // Создаем приоритетную очередь, в которой
6 // будут храниться числа типа Integer
7 PriorityQueue< Integer > pQueue = new PriorityQueue< Integer >();
8 // добавление элемента
9 pQueue.add(4);
10 pQueue.add(3);
11 pQueue.add(7);
12 pQueue.add(1);
13 pQueue.add(8);
14 // В PriorityQueue нет метода get, поэтому сначала нужно
15 // преобразовать в массив, а потом извлекать,
16 // либо использовать итератор, который рассмотрим далее
17 Integer[] hSetArr = pQueue.toArray(new Integer[pQueue.size()]);
18 for (int i = 0; i < hSetArr.length; i++) {
19 System.out.println(hSetArr[i]);
20 }
21 // Проверка на наличие элемента в списке
22 System.out.println(pQueue.contains(3));
23 // Можно увидеть приоритет удаления (от меньшего числа к большему)
24 System.out.println(pQueue.remove());
25 System.out.println(pQueue.remove());
26 System.out.println(pQueue.remove());
27 System.out.println(pQueue.remove());
28 System.out.println(pQueue.remove());
29 // Как можно увидеть по результатам,
30 // удаляется от меньшего числа к большему.
31 }
32}
Вывод:

Как можно увидеть по результатам, удаление происходит от меньшего числа к большему.
Следующие уроки
Интерфейс Map в Java
16
мин.
Интерфейс Set в Java
9
мин.
Потоки ввода/вывода. PrintWriter и PrintStream
10
мин.