Класс PriorityBlockingQueue<E>
- Параметры типа:
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 можно использовать, чтобы удалить некоторые или все элементы в порядке приоритета и поместить их в другую коллекцию.
Операции этого класса не гарантируют порядок элементов с одинаковым приоритетом. Если необходимо обеспечить упорядочивание, можно определить пользовательские классы или компараторы, использующие вторичный ключ для разрешения совпадений значений основного приоритета. Например, ниже приведён класс, который применяет правило 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.
- Начиная с версии:
- 1.5
- См. также:
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
PriorityBlockingQueue() |
Создаёт PriorityBlockingQueue с начальной ёмкостью по умолчанию (11), упорядочивающий элементы в соответствии с их естественным порядком. |
PriorityBlockingQueue |
Создаёт PriorityBlockingQueue с указанной начальной ёмкостью, упорядочивающий элементы в соответствии с их естественным порядком. |
PriorityBlockingQueue |
Создаёт PriorityBlockingQueue с указанной начальной ёмкостью, упорядочивающий элементы в соответствии с указанным компаратором. |
PriorityBlockingQueue |
Создаёт PriorityBlockingQueue, содержащую элементы указанной коллекции. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
add |
Вставляет указанный элемент в эту очередь с приоритетом. |
void |
clear() |
Атомарно удаляет все элементы из этой очереди. |
Comparator |
comparator() |
Возвращает компаратор, используемый для упорядочивания элементов в этой очереди, или null, если очередь использует естественный порядок своих элементов. |
boolean |
contains |
Возвращает true, если эта очередь содержит указанный элемент. |
int |
drainTo |
Удаляет все доступные элементы из этой очереди и добавляет их в указанную коллекцию. |
int |
drainTo |
Удаляет из этой очереди не более указанного числа доступных элементов и добавляет их в указанную коллекцию. |
void |
forEach |
Выполняет заданное действие для каждого элемента Iterable, пока не будут обработаны все элементы или действие не вызовет исключение. |
Iterator |
iterator() |
Возвращает итератор по элементам этой очереди. |
boolean |
offer |
Вставляет указанный элемент в эту очередь с приоритетом. |
boolean |
offer |
Вставляет указанный элемент в эту очередь с приоритетом. |
E |
peek() |
Возвращает, не удаляя, голову этой очереди или null, если очередь пуста. |
E |
poll() |
Извлекает и удаляет голову этой очереди или возвращает null, если очередь пуста. |
E |
poll |
Извлекает и удаляет голову этой очереди, при необходимости ожидая появления элемента в течение указанного времени ожидания. |
void |
put |
Вставляет указанный элемент в эту очередь с приоритетом. |
int |
remainingCapacity() |
Всегда возвращает Integer.MAX_VALUE, поскольку PriorityBlockingQueue не ограничена по ёмкости. |
boolean |
remove |
Удаляет один экземпляр указанного элемента из этой очереди, если он присутствует. |
boolean |
removeAll |
Удаляет все элементы этой коллекции, которые также содержатся в указанной коллекции (необязательная операция). |
boolean |
removeIf |
Удаляет все элементы этой коллекции, удовлетворяющие заданному предикату (необязательная операция). |
boolean |
retainAll |
Оставляет только те элементы этой коллекции, которые содержатся в указанной коллекции (необязательная операция). |
int |
size() |
Возвращает количество элементов в этой коллекции. |
Spliterator |
spliterator() |
Возвращает Spliterator для обхода элементов этой очереди. |
E |
take() |
Извлекает и удаляет голову этой очереди, при необходимости ожидая появления элемента. |
Object[] |
toArray() |
Возвращает массив, содержащий все элементы этой очереди. |
<T> T[] |
toArray |
Возвращает массив, содержащий все элементы этой очереди; тип возвращаемого массива во время выполнения соответствует типу указанного массива. |
Методы, объявленные в классе AbstractQueue
addAll, element, remove
Методы, объявленные в классе AbstractCollection
containsAll, isEmpty, toString
Методы, объявленные в классе Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Методы, объявленные в интерфейсе Collection
addAll, containsAll, equals, hashCode, isEmpty, parallelStream, stream, toArray
Подробное описание конструкторов
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
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
comparator
public Comparator<? super E> comparator()
null, если очередь использует естественный порядок своих элементов.- Возвращает:
- компаратор, используемый для упорядочивания элементов этой очереди, или
null, если очередь использует естественный порядок своих элементов
size
public int size()
CollectionInteger.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)
BlockingQueuec может привести к тому, что на момент выброса соответствующего исключения элементы не будут содержаться ни в одной коллекции, будут содержаться в одной из них или в обеих. Попытка перенести элементы очереди в нее саму приводит к IllegalArgumentException. Кроме того, поведение этой операции не определено, если указанная коллекция изменяется во время ее выполнения.- Определено в:
-
drainToв интерфейсеBlockingQueue<E> - Параметры:
-
c— коллекция, в которую нужно перенести элементы - Возвращает:
- количество перенесенных элементов
- Исключения:
-
UnsupportedOperationException— если указанная коллекция не поддерживает добавление элементов -
ClassCastException— если класс элемента этой очереди не позволяет добавить его в указанную коллекцию -
NullPointerException— если указанная коллекция равна null -
IllegalArgumentException— если указанная коллекция является этой очередью или какое-либо свойство элемента этой очереди не позволяет добавить его в указанную коллекцию
drainTo
public int drainTo(Collection<? super E> c, int maxElements)
BlockingQueuec может привести к тому, что на момент выброса соответствующего исключения элементы не будут содержаться ни в одной коллекции, будут содержаться в одной из них или в обеих. Попытка перенести элементы очереди в нее саму приводит к 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 на основе массивов и API на основе коллекций.
- Определено в:
-
toArrayв интерфейсеCollection<E> - Переопределяет:
-
toArrayв классеAbstractCollection<E> - Возвращает:
- массив, содержащий все элементы этой очереди
toArray
public <T> T[] toArray(T[] a)
Если очередь помещается в указанный массив с запасом (то есть массив содержит больше элементов, чем эта очередь), элемент массива, расположенный сразу после конца очереди, устанавливается в null.
Как и метод toArray(), этот метод служит связующим звеном между API на основе массивов и 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 - См. также:
retainAll
public boolean retainAll(Collection<?> c)
AbstractCollection- Определено в:
-
retainAllв интерфейсеCollection<E> - Переопределяет:
-
retainAllв классеAbstractCollection<E> - Параметры:
-
c— коллекция, содержащая элементы, которые следует сохранить в этой коллекции - Возвращает:
-
true, если в результате вызова эта коллекция изменилась - Исключения:
-
NullPointerException— если эта коллекция содержит один или несколько элементов null, а указанная коллекция не допускает элементы null (необязательно), либо если указанная коллекция равна null - См. также:
forEach
public void forEach(Consumer<? super E> action)
IterableIterable, пока не будут обработаны все элементы или действие не вызовет исключение. Если порядок итерации определен, действия выполняются в этом порядке. Исключения, вызванные действием, передаются вызывающему коду. Поведение этого метода не определено, если действие приводит к побочным эффектам, изменяющим исходный источник элементов, за исключением случаев, когда переопределяющий класс задает политику параллельного изменения.
- Определено в:
-
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://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/util/concurrent/PriorityBlockingQueue.html