package com.interview.basics.model.graph.searcher; import java.util.HashMap; import java.util.Map; import java.util.PriorityQueue; public class IndexedPriorityQueue<Key extends Comparable<Key>, Value extends Comparable<Value>> { PriorityQueue<IndexedNode> pq; Map<Key, IndexedNode> map; public IndexedPriorityQueue(){ pq = new PriorityQueue<IndexedNode>(); map = new HashMap<Key, IndexedNode>(); } class IndexedNode implements Comparable<IndexedNode>{ Key index; Value obj; public IndexedNode(Key index, Value obj){ this.index = index; this.obj = obj; } @Override public int compareTo(IndexedNode node) { return this.obj.compareTo(node.obj); } } public void add(Key k, Value v) { IndexedNode node = new IndexedNode(k, v); pq.add(node); map.put(k, node); } public boolean isEmpty() { return pq.isEmpty(); } public Key poll() { Key key = pq.poll().index; map.remove(key); return key; } public void update(Key k, Value v) { IndexedNode node = map.get(k); if(node != null){ node.obj = v; } } public boolean contains(Key k) { return map.containsKey(k); } }