Как сделать очередь в java

Добавил пользователь Евгений Кузнецов
Обновлено: 05.10.2024

Кроме того, если я хочу инициализировать очередь, мне нужно реализовать методы очереди?

A Queue - это интерфейс, что означает, что вы не можете создать Queue напрямую.

Наилучшим вариантом является построение от класса , который уже реализует Queue интерфейс, как один из следующих: AbstractQueue , ArrayBlockingQueue , ArrayDeque , ConcurrentLinkedQueue , DelayQueue , LinkedBlockingQueue , LinkedList , PriorityBlockingQueue , PriorityQueue , или SynchronousQueue .

Альтернативой является создание собственного класса, реализующего необходимый интерфейс Queue. В этом нет необходимости, за исключением тех редких случаев, когда вы хотите сделать что-то особенное, предоставляя остальной части вашей программы расширение Queue .

Еще менее используемая альтернатива - создание анонимного класса, который реализует Queue . Вы, вероятно, не захотите этого делать, но это указано как вариант, чтобы охватить все основы.

Набор разрабатывается для содержания элементов до обработки. Помимо основного Collection операции, очереди обеспечивают дополнительную вставку, экстракцию, и инспекционные операции. Каждый из этих методов существует в двух формах: каждый выдает исключение, если работа перестала работать, другие возвраты специальное значение (или null или false, в зависимости от работы). Последняя форма работы вставки специально разработана для использования с ограниченными емкостью реализациями Queue; в большинстве реализаций вставьте операции, не может перестать работать.

Выдает исключение Возвраты специальное значение
Вставить add(e) offer(e)
Удалить remove() poll()
Исследовать element() peek()

Очереди обычно, но делают не обязательно, упорядочивают элементы в FIFO (первым прибыл - первым убыл) способ. Среди исключений приоритетные очереди, которые упорядочивают элементы согласно предоставленному компаратору, или естественное упорядочивание элементов, и очереди LIFO (или стеки), которые упорядочивают LIFO элементов (в обратном порядке). Безотносительно используемого упорядочивания глава очереди - то, что элемент, который был бы удален звонком remove() или poll() . В очереди FIFO все новые элементы вставляются в хвосте очереди. Другие виды очередей могут использовать различные правила размещения. Каждая реализация Queue должна определить свои свойства упорядочивания.

offer метод вставляет элемент если возможный, иначе возвращая false. Это отличается от Collection.add метод, который может быть не в состоянии добавить элемент только, выдавая исключение непроверенное. Метод offer разрабатывается для использования, когда отказ является нормальным, а не исключительным возникновением, например, в фиксированной емкости (или "ограниченный") очереди.

remove() и poll() методы удаляют и возвращают главу очереди. Точно то, какой элемент удаляется из очереди, является функцией политики упорядочивания очереди, которая отличается от реализации до реализации. Методы remove() И poll() отличаются только по их поведению, когда очередь пуста: метод remove() выдает исключение, в то время как метод poll() возвращает null.

element() и peek() возврат методов, но не удаляют, глава очереди.

Интерфейс Queue не определяет методы очереди блокирования, которые распространены в параллельном программировании. Эти методы, которые ожидают элементов, чтобы появиться или пространства, чтобы стать доступными, определяются в BlockingQueue интерфейс, который расширяет этот интерфейс.

Реализации Queue обычно не позволяют вставку элементов null, хотя некоторые реализации, такой как LinkedList , не запрещайте вставку null. Даже в реализациях, которые разрешают это, null не должен быть вставлен в Queue, поскольку null также используется в качестве специального возвращаемого значения методом poll, чтобы указать, что очередь не содержит элементов.

Реализации Queue обычно не определяют основанные на элементе версии методов equals и hashCode, но вместо этого наследовали идентификационные данные базируемые версии от класса Object, потому что основанное на элементе равенство не всегда четко определено для очередей с теми же самыми элементами, но различными свойствами упорядочивания.

Этот интерфейс является элементом Платформы Наборов Java.

Сводка метода

Методы
Модификатор и Тип Метод и Описание
boolean add(E e)

Вставляет указанный элемент в эту очередь, если возможно сделать так сразу, не нарушая ограничения емкости, возвращая true на успех и бросая IllegalStateException, если никакое пространство не в настоящий момент доступно.

Вставляет указанный элемент в эту очередь, если возможно сделать так сразу, не нарушая ограничения емкости.

Методы, наследованные от интерфейса java.util. Набор

Деталь метода

добавить

Вставляет указанный элемент в эту очередь, если возможно сделать так сразу, не нарушая ограничения емкости, возвращая true на успех и бросая IllegalStateException, если никакое пространство не в настоящий момент доступно.

предложение

Вставляет указанный элемент в эту очередь, если возможно сделать так сразу, не нарушая ограничения емкости. При использовании ограниченной емкостью очереди этот метод обычно предпочтителен для add(E) , который может быть не в состоянии вставить элемент только, выдавая исключение.

удалить

Получает и удаляет главу этой очереди. Этот метод отличается от poll только в этом это выдает исключение, если эта очередь пуста.

опрос

элемент

Получает, но не удаляет, глава этой очереди. Этот метод отличается от peek только в этом это выдает исключение, если эта очередь пуста.

быстрый взгляд

  • Сводка:
  • Вложенный |
  • Поле |
  • Constr |
  • Деталь:
  • Поле |
  • Constr |

Представьте ошибку или функцию
Для дальнейшей ссылки API и документации разработчика, см. Java Документация SE . Та документация содержит более подробные, предназначенные разработчиком описания, с концептуальными краткими обзорами, определениями сроков, обходных решений, и рабочих примеров кода.
Авторское право © 1993, 2011, Oracle и/или его филиалы. Все права защищены.

  • Очередь используется для вставки элементов в конец очереди и удаляется из начала очереди. Это следует концепции FIFO.
  • Java Queue поддерживает все методы интерфейса Collection, включая вставку, удаление и т. Д.
  • LinkedList , ArrayBlockingQueue и PriorityQueue являются наиболее часто используемыми реализациями.
  • Если над BlockingQueues выполняется какая-либо пустая операция, генерируется исключение NullPointerException.
  • BlockingQueues имеют поточно-ориентированные реализации.
  • Очереди, доступные в пакете java.util, являются неограниченными очередями.
  • Очереди, которые доступны в пакете java.util.concurrent, представляют собой ограниченные очереди.
  • Все очереди, кроме Deques, поддерживают вставку и удаление в хвосте и начале очереди соответственно. Deques поддерживают вставку и удаление элементов на обоих концах.

Методы в очереди:

  1. add () — этот метод используется для добавления элементов в конец очереди. Более конкретно, в последнем из связанного списка, если он используется, или в соответствии с приоритетом в случае реализации очереди с приоритетами.
  2. peek () — этот метод используется для просмотра заголовка очереди без его удаления. Возвращает ноль, если очередь пуста.
  3. element () — Этот метод похож на peek (). Выдает исключение NoSuchElementException, когда очередь пуста.
  4. remove () — Этот метод удаляет и возвращает начало очереди. Выдает исключение NoSuchElementException, когда очередь пуста.
  5. poll () — этот метод удаляет и возвращает заголовок очереди. Возвращает ноль, если очередь пуста.
  6. size () — этот метод возвращает нет. элементов в очереди.


Так как он является подтипом класса Collections, он наследует все его методы, а именно size (), isEmpty (), contains () и т. Д.
Ниже приведена простая Java-программа для демонстрации этих методов:

// Java-орограмма для демонстрации работы очереди
// интерфейс в Java

public class QueueExample

public static void main(String[] args)

Queue q = new LinkedList<>();

// Добавляет элементы в очередь

for ( int i= 0 ; i 5 ; i++)

// Отображение содержимого очереди.

System.out.println( "Elements of queue-" +q);

// Удалить голову очереди.

int removedele = q.remove();

System.out.println( "removed element-" + removedele);

// Для просмотра заголовка очереди

int head = q.peek();

System.out.println( "head of queue-" + head);

// Остальные все методы интерфейса коллекции,

// Подобный размер и содержимое могут быть использованы с этим

int size = q.size();

System.out.println( "Size of queue-" + size);

Приложения структуры данных очереди можно найти здесь

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Очередь интерфейс в Java принадлежит java.util пакет и является частью Коллекция интерфейс. Он реализует концепцию структуры данных очереди в порядке очереди, что означает, что элементы, которые мы вставляем первыми, удаляются первыми. Мы можем рассматривать интерфейс очереди как обычную очередь, которую мы видим за пределами любого центра бронирования или банкомата.

В очереди Java вставляем элементы через тыльную сторону и удаляем их через лицевую сторону.

Интерфейс очереди в Java

Особенности очереди Java

Иерархия очереди

Интерфейс очереди в Java

Методы интерфейса очереди

Классы, реализующие интерфейс Queue

Java Queue - это интерфейс, поэтому для него требуются классы реализации. Существует 3 класса для реализации интерфейса Queue: PriorityQueue, LinkedList и ArrayDeque.

PriorityQueue

Связанный список

Связанный список - это часто используемый класс реализации очереди, основанный на структуре данных LinkedList. Каждый элемент ссылается на другой, используя адрес. Каждый элемент называется узлом, который содержит часть данных и часть адреса. Он хранит данные линейно.

ArrayDeque

Класс ArrayDeque реализует интерфейс Deque, что означает, что мы можем вставлять и удалять элементы с обеих сторон. Это позволяет нам создавать массив с изменяемым размером без какой-либо емкости.

Интерфейсы, расширяющие интерфейс очереди

Интерфейс Queue также содержит подынтерфейсы, расширяющие его. Список подинтерфейсов - Deque, BlockingQueue и BlockingDeque.

Deque

Deque означает двустороннюю очередь, что означает, что мы можем вставлять и удалять элементы с обоих концов. Класс ArrayDeque реализует этот интерфейс.

Блокировка очереди

Классы реализации BlockingQueue являются потокобезопасными, в отличие от классов Queue. PriorityBlockingQueue, LinkedBlockingQueue, ArrayBlockingQueue - это классы, реализующие этот интерфейс.

BlockingDeque

Интерфейс BlockingDeque имеет специальную функциональность, которая может блокировать операцию вставки, когда очередь заполнена, или блокировать операцию удаления, когда очередь пуста. Поскольку это тип интерфейса Deque, он поддерживает вставку и удаление с обоих концов.

Пример: добавить элементы в очередь

Ниже приведен пример добавления элементов в очередь с использованием методов add () и addAll (). Используя метод add (), мы можем добавить определенный элемент, а с помощью метода addAll () мы можем добавить коллекцию элементов.

Пример: удалить элементы из очереди

Мы можем использовать метод remove () для удаления элемента head и определенного элемента, если мы укажем значение. Мы можем удалить набор элементов с помощью метода removeAll (). Чтобы получить и удалить элемент заголовка очереди, мы можем использовать метод опроса.

Пример: доступ к элементам в очереди

Используя метод итератора, мы можем перемещаться по всем значениям в очереди. Чтобы получить элемент головы, мы можем использовать метод peek. В приведенном ниже примере показаны оба метода.

Пример: преобразование очереди в массив

Мы также можем преобразовать структуру данных очереди в массив с помощью метода toArray.

Читайте также: