Класс PriorityBlockingQueue<E>
- java.lang.Object
-
- java.util.AbstractCollection<E>
-
- java.util.AbstractQueue<E>
-
- java.util.concurrent.PriorityBlockingQueue<E>
- Type Parameters:
-
E- тип элементов, хранящихся в этой очереди
- All Implemented Interfaces:
-
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 может использоваться для удаления некоторых или всех элементов в порядке приоритета и размещения их в другой коллекции.
Операции с этим классом не гарантируют порядок элементов с одинаковым приоритетом. Если вам нужно обеспечить порядок, вы можете определить пользовательские классы или компараторы, использующие вторичный ключ для разрыва связей в значениях приоритета первого уровня. Например, вот класс, который применяет порядок «первым пришёл — первым обслужен» для разрыва связей между сопоставимыми элементами. Для его использования вы бы вставили new FIFOEntry(anEntry) вместо простого объекта записи.
class FIFOEntry<E extends Comparable<? super E>>
implements Comparable<FIFOEntry<E>> {
static final AtomicLong seq = new AtomicLong(0);
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(int initialCapacity) | Создаёт |
PriorityBlockingQueue(int initialCapacity,
Comparator<? super E> comparator) | Создаёт |
PriorityBlockingQueue(Collection<? extends E> c) | Создаёт |
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
boolean | add(E e) | Вставляет указанный элемент в эту очередь с приоритетом. |
void | clear() | Атомарно удаляет все элементы из этой очереди. |
Comparator<? super E> | comparator() | Возвращает компаратор, используемый для упорядочивания элементов в этой очереди, или |
boolean | contains(Object o) | Возвращает |
int | drainTo(Collection<? super E> c) | Удаляет все доступные элементы из этой очереди и добавляет их в заданную коллекцию. |
int | drainTo(Collection<? super E> c,
int maxElements) | Удаляет не более заданного количества доступных элементов из этой очереди и добавляет их в заданную коллекцию. |
void | forEach(Consumer<? super E> action) | Выполняет заданное действие для каждого элемента |
Iterator<E> | iterator() | Возвращает итератор по элементам в этой очереди. |
boolean | offer(E e) | Вставляет указанный элемент в эту очередь с приоритетом. |
boolean | offer(E e,
long timeout,
TimeUnit unit) | Вставляет указанный элемент в эту очередь с приоритетом. |
void | put(E e) | Вставляет указанный элемент в эту очередь с приоритетом. |
int | remainingCapacity() | Всегда возвращает |
boolean | remove(Object o) | Удаляет один экземпляр указанного элемента из этой очереди, если он присутствует. |
boolean | removeAll(Collection<?> c) | Удаляет все элементы этой коллекции, которые также содержатся в указанной коллекции (необязательная операция). |
boolean | removeIf(Predicate<? super E> filter) | Удаляет все элементы этой коллекции, которые удовлетворяют заданному предикату. |
boolean | retainAll(Collection<?> c) | Сохраняет только элементы в этой коллекции, которые содержатся в указанной коллекции (необязательная операция). |
Spliterator<E> | spliterator() | Возвращает |
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.concurrent.BlockingQueue
poll, take Методы, объявленные в интерфейсе java.util.Collection
addAll, containsAll, equals, hashCode, isEmpty, parallelStream, size, stream, toArray Методы, объявленные в интерфейсе java.util.Queue
element, peek, poll, remove Подробное описание конструкторов
PriorityBlockingQueue
public PriorityBlockingQueue()
Создаёт PriorityBlockingQueue с начальной ёмкостью по умолчанию (11), упорядочивая элементы в соответствии с их естественным порядком.
PriorityBlockingQueue
public PriorityBlockingQueue(int initialCapacity)
Создаёт PriorityBlockingQueue с указанной начальной ёмкостью, упорядочивая элементы в соответствии с их естественным порядком.
- Parameters:
-
initialCapacity- начальная ёмкость для этой очереди с приоритетом - Throws:
-
IllegalArgumentException- еслиinitialCapacityменьше 1
PriorityBlockingQueue
public PriorityBlockingQueue(int initialCapacity,
Comparator<? super E> comparator) Создаёт PriorityBlockingQueue с указанной начальной ёмкостью, упорядочивая элементы в соответствии с указанным компаратором.
- Parameters:
-
initialCapacity- начальная ёмкость для этой очереди с приоритетом -
comparator- компаратор, который будет использоваться для упорядочивания этой очереди с приоритетом. Еслиnull, будет использован естественный порядок элементов. - Throws:
-
IllegalArgumentException- еслиinitialCapacityменьше 1
PriorityBlockingQueue
public PriorityBlockingQueue(Collection<? extends E> c)
Создаёт PriorityBlockingQueue, содержащий элементы из указанной коллекции. Если указанная коллекция является SortedSet или PriorityQueue, эта очередь с приоритетом будет упорядочена в соответствии с тем же упорядочиванием. В противном случае эта очередь с приоритетом будет упорядочена в соответствии с естественным порядком элементов.
- Parameters:
-
c- коллекция, элементы которой должны быть помещены в эту очередь с приоритетом - Throws:
-
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
comparator
public Comparator<? super E> comparator()
Возвращает компаратор, используемый для упорядочивания элементов в этой очереди, или null если эта очередь использует естественный порядок своих элементов.
- Возвращает:
- компаратор, используемый для упорядочивания элементов в этой очереди, или
nullесли эта очередь использует естественный порядок элементов
remainingCapacity
public int remainingCapacity()
Всегда возвращает Integer.MAX_VALUE потому что очередь с приоритетами не ограничена по вместимости.
- Определено в:
-
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 по элементам в этой очереди. Spliterator не просматривает элементы в каком-либо определенном порядке (характеристика ORDERED не сообщается).
Возвращаемый spliterator является слабо согласованным.
Spliterator Spliterator сообщает о Spliterator.SIZED и Spliterator.NONNULL.
- Указано:
-
spliteratorв интерфейсеCollection<E> - Указано:
-
spliteratorв интерфейсеIterable<E> - Примечание реализации:
- Spliterator
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, 2020, 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/11/docs/api/java.base/java/util/concurrent/PriorityBlockingQueue.html