Класс 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. Очередь с приоритетами, использующая естественный порядок, также не допускает вставку объектов, не реализующих Comparable (это приводит к 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.
- С момента:
- 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 | Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
addAll |
Добавляет все элементы указанной коллекции в эту очередь. |
E |
element() |
Извлекает, но не удаляет голову этой очереди. |
E |
remove() |
Извлекает и удаляет голову этой очереди. |
Методы, объявленные в классе AbstractCollection
containsAll, isEmpty, toString | Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
containsAll |
Возвращает true, если эта коллекция содержит все элементы указанной коллекции. |
boolean |
isEmpty() |
Возвращает true, если эта коллекция не содержит элементов. |
String |
toString() |
Возвращает строковое представление этой коллекции. |
Методы, объявленные в классе Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
protected Object |
clone() |
Создаёт и возвращает копию этого объекта. |
boolean |
equals |
Указывает, является ли другой объект «равным» этому объекту. |
protected void |
finalize() |
Устарело, будет удалено: этот элемент API может быть удалён в будущей версии. Финализация устарела и будет удалена в одном из будущих выпусков. |
final Class |
getClass() |
Возвращает класс времени выполнения этого Object. |
int |
hashCode() |
Возвращает хеш-код этого объекта. |
final void |
notify() |
Пробуждает один поток, ожидающий на мониторе этого объекта. |
final void |
notifyAll() |
Пробуждает все потоки, ожидающие на мониторе этого объекта. |
final void |
wait() |
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания, либо до истечения заданного промежутка реального времени. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания, либо до истечения заданного промежутка реального времени. |
Методы, объявленные в интерфейсе Collection
equals, hashCode, parallelStream, stream, toArray | Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
equals |
Сравнивает указанный объект с этой коллекцией на равенство. |
int |
hashCode() |
Возвращает значение хеш-кода этой коллекции. |
default Stream |
parallelStream() |
Возвращает, возможно, параллельный Stream, источником которого является эта коллекция. |
default Stream |
stream() |
Возвращает последовательный Stream, источником которого является эта коллекция. |
default <T> T[] |
toArray |
Возвращает массив, содержащий все элементы этой коллекции; для выделения возвращаемого массива используется предоставленная функция generator. |
Подробное описание конструкторов
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.