Топ-100Интерфейс Queue в Java - CodOrbits
LogoCodOrbits

Раздел: Коллекции

Изучите Java Collections Framework: List, Set, Map и другие структуры данных для эффективной работы с данными

Все разделы
Иконка Коллекции

Интерфейс Queue в Java

Last updated: 5 мая 2025 г.

Благодаря классам реализующим Queue можно создавать массивы реализующие очередь.

Example

Что такое очередь, 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
мин.

Similar Articles Icon
Divider

Интерфейс Set в Java

9
мин.

Similar Articles Icon
Divider

Потоки ввода/вывода. PrintWriter и PrintStream

10
мин.

Similar Articles Icon