Автор оригинала: Pankaj Kumar.
Очередь Java – это интерфейс, доступный в пакете java.util и расширяющий java.util.Интерфейс сбора данных. Как и список Java, очередь Java представляет собой набор упорядоченных элементов (или объектов), но она выполняет операции вставки и удаления по-разному. Мы можем использовать очередь для хранения элементов перед обработкой этих элементов.
Очередь Java
В этом разделе мы обсудим некоторые важные моменты, касающиеся очереди Java:
- интерфейс java.util.Queue является подтипом java.util.Интерфейс сбора данных.
- Как и в реальной очереди (например, в банке или в банкомате), очередь вставляет элементы в конец очереди и удаляет из начала очереди.
- Очередь Java представляет собой упорядоченный список элементов.
- Очередь Java следует порядку FIFO для вставки и удаления своих элементов. FIFO означает Первый вход, Первый выход.
- Очередь Java поддерживает все методы интерфейса сбора.
- Наиболее часто используемыми реализациями очередей являются Связанный список, ArrayBlockingQueue и Очередь приоритетов.
- Блокирующие очереди не принимают нулевые элементы. Если мы выполняем какую-либо операцию, связанную с нулем, она вызывает исключение NullPointerException.
- Очереди блокировки используются для реализации приложений на основе производителей/потребителей.
- Блокирующие очереди являются потокобезопасными.
- Все очереди, доступные в пакете java.util, являются Неограниченными Очередями, а очереди, доступные в пакете java.util.concurrent, являются ограниченными очередями.
- Все деки не являются потокобезопасными.
- Concurrentlink-это неограниченная потокобезопасная очередь, основанная на связанных узлах.
- Все очереди поддерживают вставку в конце очереди и удаление в начале очереди, за исключением Deques.
- Deques-это очереди, но они поддерживают вставку и удаление элементов с обоих концов.
Диаграмма классов очередей Java
Интерфейс очереди Java расширяет интерфейс сбора. Интерфейс сбора расширяет итерационный интерфейс. Некоторые из часто используемых классов реализации очереди-LinkedList, PriorityQueue, ArrayBlockingQueue, DelayQueue, LinkedBlockingQueue, PriorityBlockingQueue и т. Д. AbstractQueue предоставляет скелетную реализацию интерфейса очереди для уменьшения усилий при реализации очереди.
Методы очереди Java
В этом разделе мы обсудим некоторые полезные и часто используемые методы очереди Java:
- int size(): для получения количества элементов в наборе.
- логическое значение isEmpty(): для проверки, является ли набор пустым или нет.
- логическое значение содержит(объект o): Возвращает значение true, если этот набор содержит указанный элемент.
- Итератор итератор(): Возвращает итератор по элементам в этом наборе. Элементы возвращаются без определенного порядка.
- логическое удаление всего(коллекция c): Удаляет из этого набора все его элементы, содержащиеся в указанной коллекции (необязательная операция).
- логическое сохранение(коллекция c): Сохраняет только элементы в этом наборе, содержащиеся в указанной коллекции (необязательная операция).
- очистить пустоту(): Удаляет все элементы из набора.
- E удалить(): Извлекает и удаляет заголовок этой очереди.
- E poll(): Извлекает и удаляет заголовок этой очереди или возвращает значение null, если эта очередь пуста.
- E peek(): Извлекает, но не удаляет заголовок этой очереди или возвращает значение null, если эта очередь пуста.
- логическое предложение(E e): Вставляет указанный элемент в эту очередь, если это возможно сделать немедленно, не нарушая ограничений емкости.
- Элемент E(): Извлекает, но не удаляет заголовок этой очереди.
- логическое добавление(E e): вставляет указанный элемент в эту очередь, если это возможно сделать немедленно, не нарушая ограничений емкости, возвращает значение true при успешном выполнении и создает исключение IllegalStateException, если в данный момент нет свободного места.
- Объект[] toArray(): Возвращает массив, содержащий все элементы в этом наборе. Если этот набор дает какие-либо гарантии относительно того, в каком порядке его элементы возвращаются итератором, этот метод должен возвращать элементы в том же порядке.
Основы очереди Java
Поскольку очередь Java расширяет коллекцию Java, она также поддерживает все операции интерфейса коллекции. Давайте рассмотрим некоторые простые операции в следующем примере:
package com.journaldev.queue; import java.util.*; public class QueueExample { public static void main(String[] args) { Queuequeue = new LinkedList<>(); queue.add("one"); queue.add("two"); queue.add("three"); queue.add("four"); System.out.println(queue); queue.remove("three"); System.out.println(queue); System.out.println("Queue Size: " + queue.size()); System.out.println("Queue Contains element 'two' or not? : " + queue.contains("two")); // To empty the queue queue.clear(); } }
Выход:-
[one, two, three, four] [one, two, four] Queue Size: 3 Queue Contains element 'two' or not? : true
Массив Java в очередь
Здесь мы можем изучить, как преобразовать массив Java в очередь с помощью метода “Collections.addAll()” с помощью одного простого примера.
import java.util.*; public class ArrayToQueue { public static void main(String[] args) { String nums[] = {"one","two","three","four","five"}; Queuequeue = new LinkedList<>(); Collections.addAll(queue, nums); System.out.println(queue); } }
Вывод:- Когда мы запустим вышеуказанную программу, мы получим следующий вывод:
[one, two, three, four, five]
Очередь Java в массив
Здесь мы рассмотрим, как преобразовать очередь Java в массив Java с помощью “toArray()” на одном простом примере.
import java.util.*; public class QueueToArray { public static void main(String[] args) { Queuequeue = new LinkedList<>(); queue.add("one"); queue.add("two"); queue.add("three"); queue.add("four"); queue.add("five"); String strArray[] = queue.toArray(new String[queue.size()]); System.out.println(Arrays.toString(strArray)); } }
Вывод:- Когда мы запустим вышеуказанную программу, мы получим следующий вывод:
[one, two, three, four, five]
Общие операции очереди Java
Очередь Java поддерживает все операции, поддерживаемые интерфейсом сбора, и некоторые другие операции. Он поддерживает почти все операции в двух формах.
- Один набор операций создает исключение, если операция завершается неудачно.
- Другой набор операций возвращает специальное значение, если операция завершается неудачно.
В следующей таблице кратко описаны все распространенные операции с очередями.
Вставить | предложение(e) | добавить(e) |
Удалять | опрос() | удалить() |
Исследовать | заглянуть() | элемент() |
Мы рассмотрим каждую операцию и подробно обсудим их с некоторыми полезными примерами в следующих разделах.
Операции Вставки очереди Java
В этом разделе мы подробно обсудим операцию вставки очереди Java с некоторыми полезными примерами. Если эта операция выполняется успешно, она возвращает значение “true”. Как мы знаем, очередь поддерживает операцию вставки в двух формах:
- Очередь.добавить(e):
- Очередь.предложение(e):
Он создает исключение, если операция завершается неудачно.
Он возвращает специальное значение в случае сбоя операции.
ПРИМЕЧАНИЕ:- Здесь специальное значение может быть либо “false”, либо “null”
Операция добавления очереди()
Операция add() используется для вставки нового элемента в очередь. Если он успешно выполняет операцию вставки, он возвращает значение “true”. В противном случае он выбрасывает java.lang.Исключение незаконного состояния.
Давайте разработаем один простой пример, чтобы продемонстрировать эту функциональность.
import java.util.concurrent.*; public class QueueAddOperation { public static void main(String[] args) { BlockingQueuequeue = new ArrayBlockingQueue<>(2); System.out.println(queue.add("one")); System.out.println(queue.add("two")); System.out.println(queue); System.out.println(queue.add("three")); System.out.println(queue); } }
Вывод:- Когда мы запустим вышеуказанную программу, мы получим следующий вывод:
true true [one, two] Exception in thread "main" java.lang.IllegalStateException: Queue full
Поскольку наша очередь ограничена двумя элементами, когда мы пытаемся добавить третий элемент с помощью BlockingQueue.add(), он создает исключение, как показано выше.
Операция предложения очереди()
Операция предложения() используется для вставки нового элемента в очередь. Если он успешно выполняет операцию вставки, он возвращает значение “true”. В противном случае он возвращает значение “false”.
Давайте разработаем один простой пример, чтобы продемонстрировать эту функциональность.
import java.util.concurrent.*; public class QueueOfferOperation { public static void main(String[] args) { BlockingQueuequeue = new ArrayBlockingQueue<>(2); System.out.println(queue.offer("one")); System.out.println(queue.offer("two")); System.out.println(queue); System.out.println(queue.offer("three")); System.out.println(queue); } }
Вывод:- Когда мы запустим вышеуказанную программу, мы получим следующий вывод:
true true [one, two] false [one, two]
Поскольку наша очередь ограничена двумя элементами, когда мы пытаемся добавить третий элемент с помощью BlockingQueue.операция offer() возвращает значение “false”, как показано выше.
Операции Удаления очереди Java
В этом разделе мы подробно обсудим операцию удаления очереди Java с некоторыми полезными примерами. Операции удаления возвращают головной элемент очереди, если он успешно выполняется. Как мы знаем, очередь поддерживает операцию удаления в двух формах:
- Очередь.удалить():
- Очередь.опрос():
Он создает исключение, если операция завершается неудачно.
Он возвращает специальное значение в случае сбоя операции.
ПРИМЕЧАНИЕ:- Здесь специальное значение может быть либо “false”, либо “null”
Операция удаления очереди()
Операция удаления() используется для удаления элемента из головы очереди. Если он успешно выполняет операцию удаления, он возвращает головной элемент очереди. В противном случае он создает исключение java.util.NoSuchElementException.
Давайте разработаем один простой пример, чтобы продемонстрировать эту функциональность.
import java.util.*; public class QueueRemoveOperation { public static void main(String[] args) { Queuequeue = new LinkedList<>(); queue.offer("one"); queue.offer("two"); System.out.println(queue); System.out.println(queue.remove()); System.out.println(queue.remove()); System.out.println(queue.remove()); } }
Вывод:- Когда мы запустим вышеуказанную программу, мы получим следующий вывод:
[one, two] one two Exception in thread "main" java.util.NoSuchElementException
Поскольку наша очередь состоит только из двух элементов, когда мы пытаемся вызвать метод remove() в третий раз, он выдает исключение, как показано выше.
ПРИМЕЧАНИЕ:- Queue.remove(элемент) используется для удаления указанного элемента из очереди. Если он успешно выполняет операцию удаления, он возвращает значение “true”. В противном случае он возвращает значение “false”.
Операция опроса очереди()
Операция опроса() используется для удаления элемента из головы очереди. Если он успешно выполняет операцию удаления, он возвращает головной элемент очереди. В противном случае он возвращает значение “null”.
Давайте разработаем один простой пример, чтобы продемонстрировать эту функциональность.
import java.util.*; public class QueuePollOperation { public static void main(String[] args) { Queuequeue = new LinkedList<>(); queue.offer("one"); queue.offer("two"); System.out.println(queue); System.out.println(queue.poll()); System.out.println(queue.poll()); System.out.println(queue.poll()); } }
Вывод:- Когда мы запустим вышеуказанную программу, мы получим следующий вывод:
[one, two] one two null
Поскольку наша очередь состоит только из двух элементов, когда мы пытаемся вызвать метод poll() в третий раз, он возвращает нулевое значение, как показано выше.
Операции проверки очереди Java
В этом разделе мы подробно обсудим операции проверки очереди Java с некоторыми полезными примерами. Если эта операция выполняется успешно, она возвращает головной элемент очереди, не удаляя его. Как мы знаем, очередь поддерживает операцию проверки в двух формах:
- Очередь.элемент():
- Очередь.заглянуть():
Он создает исключение, если операция завершается неудачно.
Он возвращает специальное значение в случае сбоя операции.
ПРИМЕЧАНИЕ:- Здесь специальное значение может быть либо “false”, либо “null”
Операция элемента очереди()
Операция element() используется для извлечения элемента из головы очереди без его удаления. Если он успешно выполняет операцию проверки, он возвращает головной элемент очереди. В противном случае он создает исключение java.util.NoSuchElementException.
Давайте разработаем один простой пример, чтобы продемонстрировать эту функциональность.
import java.util.*; public class QueueElementOperation { public static void main(String[] args) { Queuequeue = new LinkedList<>(); queue.add("one"); System.out.println(queue.element()); System.out.println(queue); queue.clear(); System.out.println(queue.element()); } }
Вывод:- Когда мы запустим вышеуказанную программу, мы получим следующий вывод:
one [one] Exception in thread "main" java.util.NoSuchElementException
Если мы попытаемся вызвать метод element() в пустой очереди, он вызовет исключение, как показано выше.
Операция просмотра очереди()
Операция peek() используется для извлечения элемента из головы очереди без его удаления. Если он успешно выполняет операцию проверки, он возвращает головной элемент очереди. В противном случае он возвращает нулевое значение.
Давайте разработаем один простой пример, чтобы продемонстрировать эту функциональность.
import java.util.*; public class QueuePeekOperation { public static void main(String[] args) { Queuequeue = new LinkedList<>(); queue.add("one"); System.out.println(queue.peek()); System.out.println(queue); queue.clear(); System.out.println(queue.peek()); } }
Вывод:- Когда мы запустим вышеуказанную программу, мы получим следующий вывод:
one [one] null
Если мы попытаемся вызвать метод peek() в пустой очереди, он вернет нулевое значение, но НЕ вызовет исключение, как показано выше.
Категории очередей Java
В Java мы можем найти множество реализаций очередей. W может в широком смысле разделить их на следующие два типа
- Ограниченные Очереди
- Неограниченные Очереди
Ограниченные очереди-это очереди, которые ограничены емкостью, что означает, что нам нужно указать максимальный размер очереди на момент создания. Например, ArrayBlockingQueue (см. Предыдущий пример).
Неограниченные очереди-это очереди, которые НЕ ограничены емкостью, что означает, что мы не должны указывать размер очереди. Например, Связанный список (см. Предыдущий пример).
Все очереди, доступные в пакете java.util, являются Неограниченными Очередями, а очереди, доступные в пакете java.util.concurrent, являются ограниченными очередями.
Другими словами, W может в широком смысле разделить их на следующие два типа:
- Блокировка Очередей
- Неблокирующие Очереди
Все очереди, реализующие интерфейс BlockingQueue, являются Блокирующими Очередями, а остальные-Неблокирующими Очередями.
Блокирующие очереди блокируются до тех пор, пока не завершится выполнение задания или время ожидания, но Неблокирующие очереди этого не делают.
Некоторые очереди являются очередями Deques, а некоторые очереди являются очередями с приоритетом.
Операции блокировки очереди
В дополнение к двум формам операций очереди, Блокирующая очередь поддерживает еще две формы, как показано ниже.
поставить(e) | Вставить | предложение(e, время, единица измерения) | предложение(e) | добавить(e) |
возьмите() | Удалять | опрос(время, единица измерения) | опрос() | удалить() |
Н/Д | Исследовать | Н/Д | заглянуть() | элемент() |
Некоторые операции блокируются до тех пор, пока он не завершит свою работу, а другие блокируются до истечения времени ожидания.
Это все краткое описание очереди на Java. Я надеюсь, что эти примеры очередей Java помогут вам начать работу с программированием сбора очередей.
Пожалуйста, напишите мне комментарий, если вам нравятся мои учебные пособия или у вас есть какие-либо предложения, проблемы или ошибки ввода.
Спасибо.