public abstract class PriorityQueue<T> extends Object implements Iterable<T>
NOTE: This class pre-allocates an array of length maxSize+1
and pre-fills it with elements if instantiated via the
PriorityQueue(int,Supplier)
constructor.
NOTE: Iteration order is not specified.
Constructor and Description |
---|
PriorityQueue(int maxSize)
Create an empty priority queue of the configured size.
|
PriorityQueue(int maxSize,
Supplier<T> sentinelObjectSupplier)
Create a priority queue that is pre-filled with sentinel objects, so that
the code which uses that queue can always assume it's full and only change
the top without attempting to insert any new object.
Those sentinel values should always compare worse than any non-sentinel value (i.e., lessThan(T, T) should always favor the
non-sentinel values).By default, the supplier returns null, which means the queue will not be filled with sentinel values. |
Modifier and Type | Method and Description |
---|---|
T |
add(T element)
Adds an Object to a PriorityQueue in log(size) time.
|
void |
clear()
Removes all entries from the PriorityQueue.
|
protected Object[] |
getHeapArray()
This method returns the internal heap array as Object[].
|
T |
insertWithOverflow(T element)
Adds an Object to a PriorityQueue in log(size) time.
|
Iterator<T> |
iterator() |
protected abstract boolean |
lessThan(T a,
T b)
Determines the ordering of objects in this priority queue.
|
T |
pop()
Removes and returns the least element of the PriorityQueue in log(size)
time.
|
boolean |
remove(T element)
Removes an existing element currently stored in the PriorityQueue.
|
int |
size()
Returns the number of elements currently stored in the PriorityQueue.
|
T |
top()
Returns the least element of the PriorityQueue in constant time.
|
T |
updateTop()
Should be called when the Object at top changes values.
|
T |
updateTop(T newTop)
Replace the top of the pq with
newTop and run updateTop() . |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
forEach, spliterator
public PriorityQueue(int maxSize)
public PriorityQueue(int maxSize, Supplier<T> sentinelObjectSupplier)
lessThan(T, T)
should always favor the
non-sentinel values).PriorityQueue<MyObject> pq = new MyQueue<MyObject>(numHits); // save the 'top' element, which is guaranteed to not be null. MyObject pqTop = pq.top(); <...> // now in order to add a new element, which is 'better' than top (after // you've verified it is better), it is as simple as: pqTop.change(). pqTop = pq.updateTop();NOTE: the given supplier will be called
maxSize
times,
relying on a new object to be returned and will not check if it's null again.
Therefore you should ensure any call to this method creates a new instance and
behaves consistently, e.g., it cannot return null if it previously returned
non-null and all returned instances must compare equal
.protected abstract boolean lessThan(T a, T b)
true
iff parameter a is less than parameter b.public final T add(T element)
ArrayIndexOutOfBoundsException
is thrown.public T insertWithOverflow(T element)
public final T top()
public final T pop()
public final T updateTop()
pq.top().change(); pq.updateTop();instead of
o = pq.pop(); o.change(); pq.push(o);
public final T updateTop(T newTop)
newTop
and run updateTop()
.public final int size()
public final void clear()
public final boolean remove(T element)
protected final Object[] getHeapArray()
Copyright © 2000-2019 Apache Software Foundation. All Rights Reserved.