Java 比较两个二进制堆并跟踪键、值对

Java 比较两个二进制堆并跟踪键、值对,java,heap,binary-heap,Java,Heap,Binary Heap,我正在研究二进制堆的自定义实现。我需要一个最小和最大堆,这样我就可以创建一个“买卖”出价系统 我的问题是,当一个新的报价(出售或购买)进来,然后有一个购买,那么“人”应该从堆中弹出,并记录他们的名单。我想知道如何跟踪二进制堆中的键(名称) 例如,在外部类中,我有类似的内容 public class OuterClass{ public static HashMap<String, Integer> buyers = new HashMap<>(); pub

我正在研究二进制堆的自定义实现。我需要一个最小和最大堆,这样我就可以创建一个“买卖”出价系统

我的问题是,当一个新的报价(出售或购买)进来,然后有一个购买,那么“人”应该从堆中弹出,并记录他们的名单。我想知道如何跟踪二进制堆中的键(名称)

例如,在外部类中,我有类似的内容

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
}
公共类外部类{
publicstatichashmap=newhashmap();
public static HashMap sellers=new HashMap();
公共静态BHeap buyHeap=新BHeap();
公共静态BHeap sellHeap=新BHeap();
//等等。。。
}
在我的二进制堆实现中,我有类似的东西

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
}

public class BHeap我的解决方案是在执行
pop()
peek()(返回顶部元素)
时,函数应该返回键而不是值(但在pop()中,您可以同时删除这两个值)。然后在外部类上跟踪HashMap上发生的事情(这可能是多余的,但对于另一件事来说很好)

另一种解决方案是ArrayList占位符的类型为“Person”或“Node”。实际上,我选择了基于树的解决方案

class Node<K, V extends Comparable<? super V>>{
    Node<K, V> lchild = null, rchild = null, parent = null;
    V value;
    K key;
}
类节点