public class ByteArrayIndirectPriorityQueue extends AbstractIndirectPriorityQueue<Byte> implements ByteIndirectPriorityQueue
Instances of this class use as reference list a reference array, which must be provided to each constructor, and represent a priority queue using a backing array of integer
indices—all operations are performed directly on the array. The array is enlarged as needed, but it is never shrunk. Use the trim()
method to reduce its size, if necessary.
This implementation is extremely inefficient, but it is difficult to beat when the size of the queue is very small. Moreover, it allows to enqueue several time the same index, without limitations.
Constructor and Description |
---|
ByteArrayIndirectPriorityQueue(byte[] refArray)
Creates a new empty queue with capacity equal to the length of the reference array and using the natural order.
|
ByteArrayIndirectPriorityQueue(byte[] refArray,
ByteComparator c)
Creates a new empty queue with capacity equal to the length of the reference array and a given comparator.
|
ByteArrayIndirectPriorityQueue(byte[] refArray,
int capacity)
Creates a new empty queue with given capacity and using the natural order.
|
ByteArrayIndirectPriorityQueue(byte[] refArray,
int[] a)
Wraps a given array in a queue using the natural order.
|
ByteArrayIndirectPriorityQueue(byte[] refArray,
int[] a,
ByteComparator c)
Wraps a given array in a queue using a given comparator.
|
ByteArrayIndirectPriorityQueue(byte[] refArray,
int[] a,
int size)
Wraps a given array in a queue using the natural order.
|
ByteArrayIndirectPriorityQueue(byte[] refArray,
int[] a,
int size,
ByteComparator c)
Wraps a given array in a queue using a given comparator.
|
ByteArrayIndirectPriorityQueue(byte[] refArray,
int capacity,
ByteComparator c)
Creates a new empty queue without elements with a given capacity and comparator.
|
Modifier and Type | Method and Description |
---|---|
void |
allChanged()
Notifies this queue that the all elements have changed (optional operation).
|
void |
changed()
Notifies this queue that the first element has changed (optional operation).
|
void |
changed(int index)
Notifies this queue that the specified element has changed (optional operation).
|
void |
clear()
Removes all elements from this queue.
|
ByteComparator |
comparator()
Returns the comparator associated with this queue.
|
int |
dequeue()
Dequeues the first element from this queue.
|
void |
enqueue(int x)
Enqueues a new element.
|
int |
first()
Returns the first element of this queue.
|
int |
front(int[] a)
Retrieves the front of this queue in a given array (optional operation).
|
int |
last()
Returns the last element of this queue, that is, the element the would be dequeued last (optional operation).
|
boolean |
remove(int index)
Removes the specified element from this queue (optional operation).
|
int |
size()
Returns the number of elements in this queue.
|
String |
toString() |
void |
trim()
Trims the backing array so that it has exactly
size() elements. |
contains, isEmpty
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
contains, isEmpty
public ByteArrayIndirectPriorityQueue(byte[] refArray, int capacity, ByteComparator c)
refArray
- the reference array.capacity
- the initial capacity of this queue.c
- the comparator used in this queue, or null
for the natural order.public ByteArrayIndirectPriorityQueue(byte[] refArray, int capacity)
refArray
- the reference array.capacity
- the initial capacity of this queue.public ByteArrayIndirectPriorityQueue(byte[] refArray, ByteComparator c)
refArray
- the reference array.c
- the comparator used in this queue, or null
for the natural order.public ByteArrayIndirectPriorityQueue(byte[] refArray)
refArray
- the reference array.public ByteArrayIndirectPriorityQueue(byte[] refArray, int[] a, int size, ByteComparator c)
The queue returned by this method will be backed by the given array.
refArray
- the reference array.a
- an array of indices into refArray
.size
- the number of elements to be included in the queue.c
- the comparator used in this queue, or null
for the natural order.public ByteArrayIndirectPriorityQueue(byte[] refArray, int[] a, ByteComparator c)
The queue returned by this method will be backed by the given array.
refArray
- the reference array.a
- an array of indices into refArray
.c
- the comparator used in this queue, or null
for the natural order.public ByteArrayIndirectPriorityQueue(byte[] refArray, int[] a, int size)
The queue returned by this method will be backed by the given array.
refArray
- the reference array.a
- an array of indices into refArray
.size
- the number of elements to be included in the queue.public ByteArrayIndirectPriorityQueue(byte[] refArray, int[] a)
The queue returned by this method will be backed by the given array.
refArray
- the reference array.a
- an array of indices into refArray
.public void enqueue(int x)
Note that for efficiency reasons this method will not throw an exception when x
is already in the queue. However, the queue state will become inconsistent and the
following behaviour will not be predictable.
enqueue
in interface IndirectPriorityQueue<Byte>
x
- the element to enqueue.public int dequeue()
IndirectPriorityQueue
dequeue
in interface IndirectPriorityQueue<Byte>
public int first()
IndirectPriorityQueue
first
in interface IndirectPriorityQueue<Byte>
public int last()
IndirectPriorityQueue
last
in interface IndirectPriorityQueue<Byte>
last
in class AbstractIndirectPriorityQueue<Byte>
public void changed()
IndirectPriorityQueue
changed
in interface IndirectPriorityQueue<Byte>
changed
in class AbstractIndirectPriorityQueue<Byte>
public void changed(int index)
Note that the specified element must belong to this queue.
Note that for efficiency reasons this method will not throw an exception when index
is not in the queue.
changed
in interface IndirectPriorityQueue<Byte>
changed
in class AbstractIndirectPriorityQueue<Byte>
index
- the element that has changed.public void allChanged()
IndirectPriorityQueue
allChanged
in interface IndirectPriorityQueue<Byte>
allChanged
in class AbstractIndirectPriorityQueue<Byte>
public boolean remove(int index)
IndirectPriorityQueue
remove
in interface IndirectPriorityQueue<Byte>
remove
in class AbstractIndirectPriorityQueue<Byte>
index
- the element to be removed.public int front(int[] a)
IndirectPriorityQueue
The front of an indirect queue is the set of indices whose associated elements in the reference array are equal to the element associated to the first index. These indices can be always obtain by dequeueing, but this method should retrieve efficiently such indices in the given array without modifying the state of this queue.
front
in interface IndirectPriorityQueue<Byte>
a
- an array large enough to hold the front (e.g., at least long as the reference array).a
).public int size()
IndirectPriorityQueue
size
in interface IndirectPriorityQueue<Byte>
public void clear()
IndirectPriorityQueue
clear
in interface IndirectPriorityQueue<Byte>
public void trim()
size()
elements.public ByteComparator comparator()
ByteIndirectPriorityQueue
IndirectPriorityQueue
.comparator
in interface ByteIndirectPriorityQueue
comparator
in interface IndirectPriorityQueue<Byte>
IndirectPriorityQueue.comparator()