比较两个二进制堆并跟踪Key,Value对

时间:2014-11-26 00:09:10

标签: java heap binary-heap

我正在开发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)

1 个答案:

答案 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;
}

但是特别要求它是一个数组实现