Очередь — одна из самых распространенных структур данных в программировании. Она представляет собой упорядоченную коллекцию элементов, в которой операции добавления новых элементов происходят с одного конца, а удаления — с другого. Очередь следует принципу «первым пришел — первым вышел» (FIFO — First In First Out).
В языке программирования Java очередь реализована в виде интерфейса Queue, который включает в себя основные операции с очередью, такие как добавление элемента, удаление элемента и проверка на пустоту очереди. Классы, реализующие интерфейс Queue, позволяют выбирать, куда добавить новый элемент: в начало перед существующими элементами или в конец после них.
В Java существует несколько классов, реализующих интерфейс Queue, например, ArrayDeque, LinkedList и PriorityQueue. Класс ArrayDeque представляет собой двустороннюю очередь с изменяемым размером. Класс LinkedList реализует двунаправленный список, который также можно использовать как очередь. Класс PriorityQueue, как следует из названия, представляет собой приоритетную очередь, где элементы сортируются и извлекаются в порядке их приоритета.
Принцип работы очереди в Java
В Java очередь реализуется интерфейсом Queue, который расширяет интерфейс Collection. Основные методы, предоставляемые интерфейсом Queue, включают добавление элемента в конец очереди (offer), извлечение элемента из начала очереди (poll), получение, но не удаление элемента из начала очереди (peek) и другие.
Очередь может быть реализована с использованием различных алгоритмов, таких как массивы, связанные списки, кольцевые буферы и другие. Основное преимущество использования очереди заключается в том, что она обеспечивает эффективный доступ к элементам, которые необходимо обработать в порядке их поступления.
Описание
В Java очередь представлена интерфейсом Queue. Одна из реализаций этого интерфейса – класс LinkedList, который имеет методы для добавления, удаления и получения элементов очереди. Другая реализация – класс ArrayDeque, который является более эффективной по памяти.
Основные операции, которые можно выполнять с очередью, включают:
- enqueue (добавление элемента в очередь): элемент помещается в конец очереди.
- dequeue (извлечение элемента из очереди): элемент извлекается из начала очереди.
- peek (получение первого элемента без его удаления): возвращает элемент, находящийся в начале очереди, без его удаления.
- isEmpty (проверка на пустоту): возвращает true, если очередь пуста, и false – в противном случае.
Очередь может использоваться во многих сценариях, например, для обработки задач по мере их поступления или для реализации алгоритмов обхода графов.
Ниже приведен пример использования очереди в Java:
Queue<String> queue = new LinkedList<>();queue.enqueue("First");queue.enqueue("Second");queue.enqueue("Third");String firstElement = queue.peek();System.out.println("First element: " + firstElement);while (!queue.isEmpty()) {String currentElement = queue.dequeue();System.out.println("Processing element: " + currentElement);}
Результат выполнения кода:
First element: FirstProcessing element: FirstProcessing element: SecondProcessing element: Third
Примеры
Ниже приведены несколько примеров кода, демонстрирующих использование очереди в Java.
Пример 1
import java.util.LinkedList;import java.util.Queue;public class QueueExample {public static void main(String[] args) {Queue queue = new LinkedList<>();// Добавление элементов в очередьqueue.add("элемент 1");queue.add("элемент 2");queue.add("элемент 3");// Получение и удаление элементов из очередиSystem.out.println(queue.poll());System.out.println(queue.poll());System.out.println(queue.poll());// Проверка наличия элементов в очередиSystem.out.println(queue.isEmpty());}}
Пример 2
import java.util.ArrayDeque;import java.util.Queue;public class ArrayDequeExample {public static void main(String[] args) {Queue queue = new ArrayDeque<>();// Добавление элементов в очередьqueue.offer(1);queue.offer(2);queue.offer(3);// Получение и удаление элементов из очередиSystem.out.println(queue.poll());System.out.println(queue.poll());System.out.println(queue.poll());// Проверка наличия элементов в очередиSystem.out.println(queue.isEmpty());}}
Пример 3
import java.util.PriorityQueue;import java.util.Queue;public class PriorityQueueExample {public static void main(String[] args) {Queue queue = new PriorityQueue<>();// Добавление элементов в очередьqueue.offer(3);queue.offer(1);queue.offer(2);// Получение и удаление элементов из очередиSystem.out.println(queue.poll());System.out.println(queue.poll());System.out.println(queue.poll());// Проверка наличия элементов в очередиSystem.out.println(queue.isEmpty());}}