Class HeapPriorityQueueSet<T extends HeapPriorityQueueElement>
java.lang.Object
org.apache.flink.runtime.state.heap.AbstractHeapPriorityQueue<T>
org.apache.flink.runtime.state.heap.HeapPriorityQueue<T>
org.apache.flink.runtime.state.heap.HeapPriorityQueueSet<T>
- Type Parameters:
T- type of the contained elements.
- All Implemented Interfaces:
InternalPriorityQueue<T>,KeyGroupedInternalPriorityQueue<T>
public class HeapPriorityQueueSet<T extends HeapPriorityQueueElement>
extends HeapPriorityQueue<T>
implements KeyGroupedInternalPriorityQueue<T>
A heap-based priority queue with set semantics, based on
HeapPriorityQueue. The heap is
supported by hash set for fast contains (de-duplication) and deletes. Object identification
happens based on Object.equals(Object).
Possible future improvements:
- We could also implement shrinking for the heap and the deduplication set.
- We could replace the deduplication maps with more efficient custom implementations. In particular, a hash set would be enough if it could return existing elements on unsuccessful adding, etc..
-
Field Summary
Fields inherited from class org.apache.flink.runtime.state.heap.HeapPriorityQueue
elementPriorityComparatorFields inherited from class org.apache.flink.runtime.state.heap.AbstractHeapPriorityQueue
queue, size -
Constructor Summary
ConstructorsConstructorDescriptionHeapPriorityQueueSet(PriorityComparator<T> elementPriorityComparator, KeyExtractorFunction<T> keyExtractor, int minimumCapacity, KeyGroupRange keyGroupRange, int totalNumberOfKeyGroups) Creates an emptyHeapPriorityQueueSetwith the requested initial capacity. -
Method Summary
Modifier and TypeMethodDescriptionbooleanAdds the element to the queue.voidclear()Clears the queue.getSubsetForKeyGroup(int keyGroupId) Returns the subset of elements in the priority queue that belongs to the given key-group, within the operator's key-group range.poll()Retrieves and removes the first element (w.r.t. the order) of this set, or returnsnullif this set is empty.booleanIn contrast to the superclass and to maintain set semantics, removal here is based on comparing the given element viaObject.equals(Object).Methods inherited from class org.apache.flink.runtime.state.heap.HeapPriorityQueue
addInternal, adjustModifiedElement, getHeadElementIndex, removeInternalMethods inherited from class org.apache.flink.runtime.state.heap.AbstractHeapPriorityQueue
addAll, isEmpty, iterator, moveElementToIdx, peek, resizeForBulkLoad, resizeQueueArray, size, toArray
-
Constructor Details
-
HeapPriorityQueueSet
public HeapPriorityQueueSet(@Nonnull PriorityComparator<T> elementPriorityComparator, @Nonnull KeyExtractorFunction<T> keyExtractor, @Nonnegative int minimumCapacity, @Nonnull KeyGroupRange keyGroupRange, @Nonnegative int totalNumberOfKeyGroups) Creates an emptyHeapPriorityQueueSetwith the requested initial capacity.- Parameters:
elementPriorityComparator- comparator for the priority of contained elements.keyExtractor- function to extract a key from the contained elements.minimumCapacity- the minimum and initial capacity of this priority queue.keyGroupRange- the key-group range of the elements in this set.totalNumberOfKeyGroups- the total number of key-groups of the job.
-
-
Method Details
-
poll
Description copied from interface:InternalPriorityQueueRetrieves and removes the first element (w.r.t. the order) of this set, or returnsnullif this set is empty.NOTE: Correct key (i.e. the key of the polled element) must be set on KeyContext before calling this method.
- Specified by:
pollin interfaceInternalPriorityQueue<T extends HeapPriorityQueueElement>- Overrides:
pollin classAbstractHeapPriorityQueue<T extends HeapPriorityQueueElement>- Returns:
- the first element of this ordered set, or
nullif this set is empty.
-
add
Adds the element to the queue. In contrast to the superclass and to maintain set semantics, this happens only if no such element is already contained (determined byObject.equals(Object)).- Specified by:
addin interfaceInternalPriorityQueue<T extends HeapPriorityQueueElement>- Overrides:
addin classAbstractHeapPriorityQueue<T extends HeapPriorityQueueElement>- Parameters:
element- the element to add to the set.- Returns:
trueif the operation changed the head element or if is it unclear if the head element changed. Only returnsfalseiff the head element was not changed by this operation.
-
remove
In contrast to the superclass and to maintain set semantics, removal here is based on comparing the given element viaObject.equals(Object).- Specified by:
removein interfaceInternalPriorityQueue<T extends HeapPriorityQueueElement>- Overrides:
removein classAbstractHeapPriorityQueue<T extends HeapPriorityQueueElement>- Parameters:
toRemove- the element to remove.- Returns:
trueif the operation changed the head element or if is it unclear if the head element changed. Only returnsfalseiff the head element was not changed by this operation.
-
clear
public void clear()Description copied from class:AbstractHeapPriorityQueueClears the queue.- Overrides:
clearin classAbstractHeapPriorityQueue<T extends HeapPriorityQueueElement>
-
getSubsetForKeyGroup
Description copied from interface:KeyGroupedInternalPriorityQueueReturns the subset of elements in the priority queue that belongs to the given key-group, within the operator's key-group range.- Specified by:
getSubsetForKeyGroupin interfaceKeyGroupedInternalPriorityQueue<T extends HeapPriorityQueueElement>
-