我正在开发Binary堆的自定义实现。我需要一个Min和一个Max Heap,所以我可以创建一个" Sale - Buy"投标系统。
我的问题是,当一个新的报价(销售或购买)进来然后有一个购买然后"人"应该从堆中弹出并跟踪跟踪它们的列表。我想知道如何跟踪二进制堆中的密钥(名称)。
例如在外层我有类似的东西。
public class OuterClass{
public static HashMap<String, Integer> buyers = new HashMap<>();
public static HashMap<String, Integer> sellers = new HashMap<>();
public static BHeap<String, Integer> buyHeap = new BHeap<>();
public static BHeap<String, Integer> sellHeap = new BHeap<>();
//etc...
}
在我的二进制堆实现中,我有类似的东西。
public class BHeap <K extends Comparable<? super K>, V extends Comparable<? super V>> {
protected ArrayList<K> keys = new ArrayList<>();
protected ArrayList<V> values = new ArrayList<>();
//do heap stuff
}
当我比较两个堆时,我会一直弹出,直到找到匹配项(即买入价>&=卖价)。但是,当我只能返回的信息是VAL
时,如何跟踪卖出和买入的人(KEY)答案 0 :(得分:0)
我的解决方案是在执行pop()
或peek()(returns top element)
时,该函数应该返回KEY而不是VALUE(但是在pop()中你删除了两者。然后在外部类中,您可以跟踪HashMap上发生的事情(这可能是多余的,但对另一件事情有好处)
另一个解决方案是ArrayList占位符属于&#34; Person&#34;或者&#34; Node&#34;。我实际上选择了
的基于树的解决方案class Node<K, V extends Comparable<? super V>>{
Node<K, V> lchild = null, rchild = null, parent = null;
V value;
K key;
}
但是特别要求它是一个数组实现