Spec-Zone.ru › OpenJDK 24

Класс PriorityBlockingQueue<E>

java.lang.Object
java.util.AbstractCollection<E>
java.util.AbstractQueue<E>
java.util.concurrent.PriorityBlockingQueue<E>
Type Parameters:
E - тип элементов, хранящихся в этой очереди
Все реализованные интерфейсы:
Serializable, Iterable<E>, Collection<E>, BlockingQueue<E>, Queue<E>
public class PriorityBlockingQueue<E> extends AbstractQueue<E> implements BlockingQueue<E>, Serializable
Неограниченная блокирующая очередь, которая использует те же правила упорядочивания, что и класс PriorityQueue, и предоставляет блокирующие операции извлечения. Хотя эта очередь логически неограничена, попытки добавления могут завершиться неудачей из-за истощения ресурсов (вызывая OutOfMemoryError). Этот класс не допускает null элементы. Очередь с приоритетами, использующая естественный порядок, также не допускает вставки несопоставимых объектов (в противном случае это приведет к ClassCastException).

Этот класс и его итератор реализуют все необязательные методы интерфейсов Collection и Iterator. Итератор, предоставляемый методом iterator(), и разделитель, предоставляемый методом spliterator(), не гарантируют прохождения элементов PriorityBlockingQueue в каком-либо определенном порядке. Если вам нужна упорядоченная обработка, рассмотрите использование Arrays.sort(pq.toArray()). Кроме того, метод drainTo может использоваться для удаления некоторых или всех элементов в порядке приоритета и их помещения в другую коллекцию.

Операции с этим классом не гарантируют порядок элементов с одинаковым приоритетом. Если вам нужно принудительно установить порядок, вы можете определить пользовательские классы или компараторы, которые используют вторичный ключ для разрыва ничьих в значениях первичного приоритета. Например, вот класс, который применяет порядок «первым пришёл — первым обслужен» для разрыва ничьих в сравнимых элементах. Чтобы использовать его, вы вставили бы new FIFOEntry(anEntry) вместо простого объекта записи.

 
 class FIFOEntry<E extends Comparable<? super E>>
     implements Comparable<FIFOEntry<E>> {
   static final AtomicLong seq = new AtomicLong();
   final long seqNum;
   final E entry;
   public FIFOEntry(E entry) {
     seqNum = seq.getAndIncrement();
     this.entry = entry;
   }
   public E getEntry() { return entry; }
   public int compareTo(FIFOEntry<E> other) {
     int res = entry.compareTo(other.entry);
     if (res == 0 && other.entry != this.entry)
       res = (seqNum < other.seqNum ? -1 : 1);
     return res;
   }
 }

Этот класс является частью Java Collections Framework.

Since:
1.5
See Also:
  • Serialized Form

Краткое описание конструкторов

Конструктор Описание
PriorityBlockingQueue()
Создает PriorityBlockingQueue с начальной емкостью по умолчанию (11), упорядочивая свои элементы в соответствии с их естественным порядком.
PriorityBlockingQueue(int initialCapacity)
Создает PriorityBlockingQueue с заданной начальной емкостью, упорядочивая свои элементы в соответствии с их естественным порядком.
PriorityBlockingQueue(int initialCapacity, Comparator<? super E> comparator)
Создает PriorityBlockingQueue с заданной начальной емкостью, упорядочивая свои элементы в соответствии с указанным компаратором.
PriorityBlockingQueue(Collection<? extends E> c)
Создает PriorityBlockingQueue, содержащий элементы в указанной коллекции.

Краткое описание методов

Модификатор и тип Метод Описание
boolean add(E e)
Вставляет указанный элемент в эту очередь с приоритетами.
void clear()
Атомарно удаляет все элементы из этой очереди.
Comparator<? super E> comparator()
Возвращает компаратор, используемый для упорядочения элементов в этой очереди, или null, если эта очередь использует естественный порядок своих элементов.
boolean contains(Object o)
Возвращает true, если эта очередь содержит указанный элемент.
int drainTo(Collection<? super E> c)
Удаляет все доступные элементы из этой очереди и добавляет их в заданную коллекцию.
int drainTo(Collection<? super E> c, int maxElements)
Удаляет не более заданного количества доступных элементов из этой очереди и добавляет их в заданную коллекцию.
void forEach(Consumer<? super E> action)
Выполняет заданное действие для каждого элемента Iterable, пока все элементы не будут обработаны или действие не выбросит исключение.
Iterator<E> iterator()
Возвращает итератор по элементам в этой очереди.
boolean offer(E e)
Вставляет указанный элемент в эту очередь с приоритетами.
boolean offer(E e, long timeout, TimeUnit unit)
Вставляет указанный элемент в эту очередь с приоритетами.
E peek()
Извлекает, но не удаляет, голову этой очереди или возвращает null, если эта очередь пуста.
E poll()
Извлекает и удаляет голову этой очереди или возвращает null, если эта очередь пуста.
E poll(long timeout, TimeUnit unit)
Извлекает и удаляет голову этой очереди, ожидая в течение заданного времени ожидания, если необходимо, пока элемент не станет доступным.
void put(E e)
Вставляет указанный элемент в эту очередь с приоритетами.
int remainingCapacity()
Всегда возвращает Integer.MAX_VALUE, потому что PriorityBlockingQueue не ограничена по емкости.
boolean remove(Object o)
Удаляет один экземпляр указанного элемента из этой очереди, если он присутствует.
boolean removeAll(Collection<?> c)
Удаляет все элементы этой коллекции, которые также содержатся в указанной коллекции (необязательная операция).
boolean removeIf(Predicate<? super E> filter)
Удаляет все элементы этой коллекции, которые удовлетворяют заданному предикату (необязательная операция).
boolean retainAll(Collection<?> c)
Оставляет только элементы в этой коллекции, которые содержатся в указанной коллекции (необязательная операция).
int size()
Возвращает количество элементов в этой коллекции.
Spliterator<E> spliterator()
Возвращает Spliterator по элементам в этой очереди.
E take()
Извлекает и удаляет голову этой очереди, ожидая, если необходимо, пока элемент не станет доступным.
Object[] toArray()
Возвращает массив, содержащий все элементы в этой очереди.
<T> T[] toArray(T[] a)
Возвращает массив, содержащий все элементы в этой очереди; тип времени выполнения возвращаемого массива — тип указанного массива.

Методы, объявленные в классе java.util.AbstractQueue

addAll, element, remove

Методы, объявленные в классе java.util.AbstractCollection

containsAll, isEmpty, toString

Методы, объявленные в классе java.lang.Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

Методы, объявленные в интерфейсе java.util.Collection

addAll, containsAll, equals, hashCode, isEmpty, parallelStream, stream, toArray

Методы, объявленные в интерфейсе java.util.Queue

element, remove

Краткое описание конструкторов

PriorityBlockingQueue

public PriorityBlockingQueue()
Создаёт PriorityBlockingQueue с начальной ёмкостью по умолчанию (11), которая упорядочивает свои элементы в соответствии с их естественным порядком.

PriorityBlockingQueue

public PriorityBlockingQueue(int initialCapacity)
Создаёт PriorityBlockingQueue с указанной начальной ёмкостью, которая упорядочивает свои элементы в соответствии с их естественным порядком.
Параметры:
initialCapacity - начальная ёмкость для этой очереди с приоритетом
Исключения:
IllegalArgumentException - если initialCapacity меньше 1

PriorityBlockingQueue

public PriorityBlockingQueue(int initialCapacity, Comparator<? super E> comparator)
Создаёт PriorityBlockingQueue с указанной начальной ёмкостью, которая упорядочивает свои элементы в соответствии с указанным компаратором.
Параметры:
initialCapacity - начальная ёмкость для этой очереди с приоритетом
comparator - компаратор, который будет использоваться для упорядочивания этой очереди с приоритетом. Если null, будет использоваться естественный порядок элементов.
Исключения:
IllegalArgumentException - если initialCapacity меньше 1

PriorityBlockingQueue

public PriorityBlockingQueue(Collection<? extends E> c)
Создаёт PriorityBlockingQueue, содержащий элементы из указанной коллекции. Если указанная коллекция является SortedSet или PriorityBlockingQueue, эта очередь с приоритетом будет упорядочена в соответствии с тем же порядком. В противном случае эта очередь с приоритетом будет упорядочена в соответствии с естественным порядком её элементов.
Параметры:
c - коллекция, элементы которой должны быть помещены в эту очередь с приоритетом
Исключения:
ClassCastException - если элементы указанной коллекции не могут быть сравнены друг с другом в соответствии с порядком очереди с приоритетом
NullPointerException - если указанная коллекция или любой из её элементов являются null

Подробное описание методов

add

public boolean add(E e)
Вставляет указанный элемент в эту очередь с приоритетом.
Указано в:
add в интерфейсе BlockingQueue<E>
Указано в:
add в интерфейсе Collection<E>
Указано в:
add в интерфейсе Queue<E>
Переопределяет:
add в классе AbstractQueue<E>
Параметры:
e - элемент для добавления
Возвращает:
true (как указано в Collection.add(E))
Исключения:
ClassCastException - если указанный элемент не может быть сравнен с элементами, которые в данный момент находятся в очереди с приоритетом, в соответствии с порядком очереди с приоритетом
NullPointerException - если указанный элемент равен null

offer

public boolean offer(E e)
Вставляет указанный элемент в эту очередь с приоритетом. Поскольку очередь неограничена, этот метод никогда не вернёт false.
Указано в:
offer в интерфейсе BlockingQueue<E>
Указано в:
offer в интерфейсе Queue<E>
Параметры:
e - элемент для добавления
Возвращает:
true (как указано в Queue.offer(E))
Исключения:
ClassCastException - если указанный элемент не может быть сравнен с элементами, которые в данный момент находятся в очереди с приоритетом, в соответствии с порядком очереди с приоритетом
NullPointerException - если указанный элемент равен null

put

public void put(E e)
Вставляет указанный элемент в эту очередь с приоритетом. Поскольку очередь неограничена, этот метод никогда не будет блокироваться.
Указано в:
put в интерфейсе BlockingQueue<E>
Параметры:
e - элемент для добавления
Исключения:
ClassCastException - если указанный элемент не может быть сравнен с элементами, которые в данный момент находятся в очереди с приоритетом, в соответствии с порядком очереди с приоритетом
NullPointerException - если указанный элемент равен null

offer

public boolean offer(E e, long timeout, TimeUnit unit)
Вставляет указанный элемент в эту очередь с приоритетом. Поскольку очередь неограничена, этот метод никогда не будет блокироваться или возвращать false.
Указано в:
offer в интерфейсе BlockingQueue<E>
Параметры:
e - элемент для добавления
timeout - Этот параметр игнорируется, так как метод никогда не блокируется
unit - Этот параметр игнорируется, так как метод никогда не блокируется
Возвращает:
true (как указано в BlockingQueue.offer)
Исключения:
ClassCastException - если указанный элемент не может быть сравнен с элементами, которые в данный момент находятся в очереди с приоритетом, в соответствии с порядком очереди с приоритетом
NullPointerException - если указанный элемент равен null

poll

public E poll()
Описание скопировано из интерфейса: Queue
Извлекает и удаляет головной элемент этой очереди или возвращает null, если эта очередь пуста.
Указано в:
poll в интерфейсе Queue<E>
Возвращает:
головной элемент этой очереди или null, если эта очередь пуста

take

public E take() throws InterruptedException
Описание скопировано из интерфейса: BlockingQueue
Извлекает и удаляет головной элемент этой очереди, ожидая, если необходимо, пока элемент станет доступен.
Указано в:
take в интерфейсе BlockingQueue<E>
Возвращает:
головной элемент этой очереди
Исключения:
InterruptedException - если прервано во время ожидания

poll

public E poll(long timeout, TimeUnit unit) throws InterruptedException
Описание скопировано из интерфейса: BlockingQueue
Извлекает и удаляет головной элемент этой очереди, ожидая до указанного времени ожидания, если необходимо, пока элемент станет доступен.
Указано в:
poll в интерфейсе BlockingQueue<E>
Параметры:
timeout - как долго ждать, прежде чем сдаться, в единицах unit
unit - TimeUnit, определяющий, как интерпретировать параметр timeout
Возвращает:
головной элемент этой очереди или null, если указанное время ожидания истечёт, прежде чем элемент станет доступен
Исключения:
InterruptedException - если прервано во время ожидания

peek

public E peek()
Описание скопировано из интерфейса: Queue
Извлекает, но не удаляет, головной элемент этой очереди или возвращает null, если эта очередь пуста.
Указано в:
peek в интерфейсе Queue<E>
Возвращает:
головной элемент этой очереди или null, если эта очередь пуста

comparator

public Comparator<? super E> comparator()
Возвращает компаратор, используемый для упорядочивания элементов в этой очереди, или null, если эта очередь использует естественный порядок своих элементов.
Возвращает:
компаратор, используемый для упорядочивания элементов в этой очереди, или null, если эта очередь использует естественный порядок своих элементов

size

public int size()
Описание скопировано из интерфейса: Collection
Возвращает количество элементов в этой коллекции. Если эта коллекция содержит более Integer.MAX_VALUE элементов, возвращает Integer.MAX_VALUE.
Указано в:
size в интерфейсе Collection<E>
Возвращает:
количество элементов в этой коллекции

remainingCapacity

public int remainingCapacity()
Всегда возвращает Integer.MAX_VALUE, потому что PriorityBlockingQueue не ограничена по вместимости.
Указано в:
remainingCapacity в интерфейсе BlockingQueue<E>
Возвращает:
Integer.MAX_VALUE всегда

remove

public boolean remove(Object o)
Удаляет единственный экземпляр указанного элемента из этой очереди, если он присутствует. Более формально, удаляет элемент e такой, что o.equals(e), если эта очередь содержит один или несколько таких элементов. Возвращает true тогда и только тогда, когда эта очередь содержала указанный элемент (или, что эквивалентно, если эта очередь изменилась в результате вызова).
Указано в:
remove в интерфейсе BlockingQueue<E>
Указано в:
remove в интерфейсе Collection<E>
Переопределяет:
remove в классе AbstractCollection<E>
Параметры:
o - элемент, который нужно удалить из этой очереди, если он присутствует
Возвращает:
true, если эта очередь изменилась в результате вызова

contains

public boolean contains(Object o)
Возвращает true, если эта очередь содержит указанный элемент. Более формально, возвращает true тогда и только тогда, когда эта очередь содержит по крайней мере один элемент e такой, что o.equals(e).
Указано в:
contains в интерфейсе BlockingQueue<E>
Указано в:
contains в интерфейсе Collection<E>
Переопределяет:
contains в классе AbstractCollection<E>
Параметры:
o - объект, для проверки наличия в этой очереди
Возвращает:
true, если эта очередь содержит указанный элемент

drainTo

public int drainTo(Collection<? super E> c)
Описание скопировано из интерфейса: BlockingQueue
Удаляет все доступные элементы из этой очереди и добавляет их в заданный коллекцию. Эта операция может быть более эффективной, чем многократное получение из этой очереди. Ошибка, возникшая при попытке добавить элементы в коллекцию c, может привести к тому, что элементы будут находиться ни в одной, ни в той, ни в другой, или в обеих коллекциях, когда будет брошено соответствующее исключение. Попытки осушить очередь в себя приводят к IllegalArgumentException. Кроме того, поведение этой операции не определено, если заданный коллекция изменяется во время выполнения операции.
Указано в:
drainTo в интерфейсе BlockingQueue<E>
Параметры:
c - коллекция для перевода элементов
Возвращает:
количество переданных элементов
Исключения:
UnsupportedOperationException - если добавление элементов не поддерживается заданным коллекцией
ClassCastException - если класс элемента этой очереди препятствует его добавлению в заданную коллекцию
NullPointerException - если заданный коллекция равен null
IllegalArgumentException - если заданный коллекция является этой очередью, или какая-либо особенность элемента этой очереди препятствует его добавлению в заданную коллекцию

drainTo

public int drainTo(Collection<? super E> c, int maxElements)
Описание скопировано из интерфейса: BlockingQueue
Удаляет не более заданного числа доступных элементов из этой очереди и добавляет их в заданный коллекцию. Ошибка, возникшая при попытке добавить элементы в коллекцию c, может привести к тому, что элементы будут находиться ни в одной, ни в той, ни в другой, или в обеих коллекциях, когда будет брошено соответствующее исключение. Попытки осушить очередь в себя приводят к IllegalArgumentException. Кроме того, поведение этой операции не определено, если заданный коллекция изменяется во время выполнения операции.
Указано в:
drainTo в интерфейсе BlockingQueue<E>
Параметры:
c - коллекция для перевода элементов
maxElements - максимальное количество элементов для перевода
Возвращает:
количество переданных элементов
Исключения:
UnsupportedOperationException - если добавление элементов не поддерживается заданным коллекцией
ClassCastException - если класс элемента этой очереди препятствует его добавлению в заданную коллекцию
NullPointerException - если заданный коллекция равен null
IllegalArgumentException - если заданный коллекция является этой очередью, или какая-либо особенность элемента этой очереди препятствует его добавлению в заданную коллекцию

clear

public void clear()
Атомарно удаляет все элементы из этой очереди. Очередь будет пустой после возвращения этого вызова.
Указано в:
clear в интерфейсе Collection<E>
Переопределяет:
clear в классе AbstractQueue<E>

toArray

public Object[] toArray()
Возвращает массив, содержащий все элементы этой очереди. Элементы возвращаемого массива не упорядочены.

Возвращаемый массив будет «безопасным» в том смысле, что ссылки на него не сохраняются в этой очереди. (Другими словами, этот метод должен выделить новый массив). Таким образом, вызывающая сторона свободна изменять возвращаемый массив.

Этот метод служит мостом между массивоориентированными и коллекционноориентированными API.

Указано в:
toArray в интерфейсе Collection<E>
Переопределяет:
toArray в классе AbstractCollection<E>
Возвращает:
массив, содержащий все элементы этой очереди

toArray

public <T> T[] toArray(T[] a)
Возвращает массив, содержащий все элементы этой очереди; тип выполнения возвращаемого массива — тип заданного массива. Элементы возвращаемого массива не упорядочены. Если очередь помещается в указанный массив, она возвращается в нем. В противном случае выделяется новый массив с типом выполнения указанного массива и размером этой очереди.

Если эта очередь помещается в указанный массив с избытком места (т. е. массив имеет больше элементов, чем эта очередь), элемент в массиве сразу после конца очереди устанавливается в null.

Как и метод toArray(), этот метод служит мостом между массивоориентированными и коллекционноориентированными API. Кроме того, этот метод позволяет точно управлять типом выполнения выходного массива и может в некоторых случаях использоваться для экономии затрат на выделение памяти.

Предположим, что x — это очередь, известная тем, что содержит только строки. Следующий код может быть использован для выгрузки очереди в новый выделенный массив типа String:

 String[] y = x.toArray(new String[0]);
Обратите внимание, что toArray(new Object[0]) идентичен по функции toArray().
Указано в:
toArray в интерфейсе Collection<E>
Переопределяет:
toArray в классе AbstractCollection<E>
Параметры типа:
T - тип компонента массива, который должен содержать коллекцию
Параметры:
a - массив, в который должны быть помещены элементы очереди, если он достаточно велик; в противном случае для этой цели выделяется новый массив того же типа выполнения
Возвращает:
массив, содержащий все элементы этой очереди
Исключения:
ArrayStoreException - если тип выполнения указанного массива не является супертипом типа выполнения каждого элемента в этой очереди
NullPointerException - если указанный массив равен null

iterator

public Iterator<E> iterator()
Возвращает итератор по элементам этой очереди. Итератор не возвращает элементы в определенном порядке.

Возвращаемый итератор является слабо согласованным.

Указано в:
iterator в интерфейсе Collection<E>
Указано в:
iterator в интерфейсе Iterable<E>
Указано в:
iterator в классе AbstractCollection<E>
Возвращает:
итератор по элементам этой очереди

spliterator

public Spliterator<E> spliterator()
Возвращает Spliterator над элементами этой очереди. Разделитель не обходит элементы в каком-либо определенном порядке (характеристика ORDERED не сообщается).

Возвращаемый разделитель является слабо согласованным.

Spliterator сообщает Spliterator.SIZED и Spliterator.NONNULL.

Указано в:
spliterator в интерфейсе Collection<E>
Указано в:
spliterator в интерфейсе Iterable<E>
Примечание реализации:
Spliterator дополнительно сообщает Spliterator.SUBSIZED.
Возвращает:
Spliterator над элементами этой очереди
С:
1.8

removeIf

public boolean removeIf(Predicate<? super E> filter)
Описание скопировано из интерфейса: Collection
Удаляет все элементы этого набора, удовлетворяющие заданному предикату (необязательная операция). Ошибки или исключения во время выполнения, возникающие во время итерации или предикатом, передаются вызывающему методу.
Определено в:
removeIf в интерфейсе Collection<E>
Параметры:
filter - предикат, возвращающий true для элементов, которые нужно удалить
Возвращает:
true, если какие-либо элементы были удалены
Выбрасывает:
NullPointerException - если указанный фильтр равен null

removeAll

public boolean removeAll(Collection<?> c)
Описание скопировано из класса: AbstractCollection
Удаляет все элементы этого набора, которые также содержатся в указанном наборе (необязательная операция). После возврата этого вызова этот набор не будет содержать элементов, общих с указанным набором.
Определено в:
removeAll в интерфейсе Collection<E>
Переопределяет:
removeAll в классе AbstractCollection<E>
Параметры:
c - набор, содержащий элементы, которые нужно удалить из этого набора
Возвращает:
true, если этот набор был изменён в результате вызова
Выбрасывает:
NullPointerException - если этот набор содержит один или несколько null-элементов, а указанный набор не поддерживает null-элементы (необязательно) или если указанный набор равен null
См. также:
  • AbstractCollection.remove(Object)
  • AbstractCollection.contains(Object)

retainAll

public boolean retainAll(Collection<?> c)
Описание скопировано из класса: AbstractCollection
Оставляет только элементы в этом наборе, которые содержатся в указанном наборе (необязательная операция). Другими словами, удаляет из этого набора все его элементы, которые не содержатся в указанном наборе.
Определено в:
retainAll в интерфейсе Collection<E>
Переопределяет:
retainAll в классе AbstractCollection<E>
Параметры:
c - набор, содержащий элементы, которые нужно сохранить в этом наборе
Возвращает:
true, если этот набор был изменён в результате вызова
Выбрасывает:
NullPointerException - если этот набор содержит один или несколько null-элементов, а указанный набор не допускает null-элементов (необязательно) или если указанный набор равен null
См. также:
  • AbstractCollection.remove(Object)
  • AbstractCollection.contains(Object)

forEach

public void forEach(Consumer<? super E> action)
Описание скопировано из интерфейса: Iterable
Выполняет заданное действие для каждого элемента Iterable, пока все элементы не будут обработаны или действие не выбросит исключение. Действия выполняются в порядке итерации, если этот порядок указан. Исключения, выброшенные действием, передаются вызывающему методу.

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

Определено в:
forEach в интерфейсе Iterable<E>
Параметры:
action - действие, которое нужно выполнить для каждого элемента
Выбрасывает:
NullPointerException - если указанное действие равно null

© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://download.java.net/java/early_access/jdk24/docs/api/java.base/java/util/concurrent/PriorityBlockingQueue.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API