21 package org.matsim.core.utils.collections;
23 import java.io.Serializable;
24 import java.util.Comparator;
25 import java.util.Iterator;
26 import java.util.LinkedHashMap;
28 import java.util.PriorityQueue;
50 private final PriorityQueue<PseudoEntry<E>>
delegate;
51 final Map<E, PseudoEntry<E>> lastEntry;
54 this.delegate =
new PriorityQueue<PseudoEntry<E>>(initialCapacity,
new PseudoComparator<E>());
55 this.lastEntry =
new LinkedHashMap<E, PseudoEntry<E>>(initialCapacity);
66 public boolean add(
final E o,
final double priority) {
68 throw new NullPointerException();
71 if (this.lastEntry.containsKey(o)) {
74 if (this.delegate.add(entry)) {
75 this.lastEntry.put(o, entry);
91 while ((entry != null) && (!entry.valid)) {
92 entry = this.delegate.poll();
97 this.lastEntry.remove(entry.value);
109 public boolean remove(
final E o) {
111 if ((entry != null) && (entry.valid)) {
127 return this.lastEntry.size();
133 while ((entry != null) && (!entry.valid)) {
134 this.delegate.poll();
135 entry = this.delegate.peek();
145 return this.lastEntry.isEmpty();
155 return this.
add(value, priority);
160 this.delegate.clear();
161 this.lastEntry.clear();
173 return new Iterator<E>() {
178 public boolean hasNext() {
179 return this.iterDelegate.hasNext();
184 return this.iterDelegate.next();
188 public void remove() {
189 throw new UnsupportedOperationException();
196 final double priority;
197 boolean valid =
true;
201 this.priority = priority;
205 static class PseudoComparator<T>
implements Comparator<PseudoEntry<T>>, Serializable {
206 private static final long serialVersionUID = 1L;
209 return Double.compare(o1.priority, o2.priority);
PseudoEntry(final E value, final double priority)
final PriorityQueue< PseudoEntry< E > > delegate
boolean decreaseKey(E value, double priority)
PseudoRemovePriorityQueue(final int initialCapacity)
boolean add(final E o, final double priority)