Spec-Zone.ru › OpenJDK 17

Класс 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, предоставляемый методом spliterator(), не гарантируют прохождения элементов PriorityBlockingQueue в каком-либо определенном порядке. Если вам нужна упорядоченная итерация, рассмотрите возможность использования Arrays.sort(pq.toArray()). Также метод drainTo может быть использован для удаления некоторых или всех элементов в порядке приоритета и их размещения в другой коллекции.

Операции с этим классом не гарантируют порядок элементов с одинаковым приоритетом. Если вам необходимо принудительно установить порядок, вы можете определить пользовательские классы или компараторы, которые используют дополнительный ключ для разбиения связей в значениях первичного приоритета. Например, вот класс, который применяет порядок FIFO к сопоставимым элементам. Для его использования вы бы вставили 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 всегда

удалить

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

содержит

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 - если указанный набор является этой очередью или некоторые свойства элемента этой очереди препятствуют его добавлению в указанный набор

очистить

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

итератор

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

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

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

spliterator

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

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

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 - если этот набор содержит один или несколько нулевых элементов, а указанный набор не поддерживает нулевые элементы (дополнительное), или если указанный набор является нулевым
См. также:
  • AbstractCollection.remove(Object)
  • AbstractCollection.contains(Object)

retainAll

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

forEach

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

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

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

© 1993, 2021, 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://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/PriorityBlockingQueue.html

Spec-Zone.ru

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