堆插入方法中的双项

时间:2013-04-30 13:24:31

标签: java

我看到了将项添加到二进制堆的奇怪行为。我添加了三个值:20,31,12。当我检查数组中的项目时,现在有5个值:12,20,20,31,12。我无法弄清楚重复的来源。为什么要重复项目?

添加项目:

public void add(int x){     
    int hole = heap.size();
    heap.add(hole, x);
    bubbleUp(hole);     
}

bubbleup方法:

private void bubbleUp(int child) {
    int parent;
    Bid tmp;

    if (child != 0) {
        parent = (child-1)/2;
        if (heap.get(parent).compareTo(heap.get(child))) {
            tmp = heap.get(parent);
            heap.add(parent, heap.get(child));
            heap.add(child, tmp);                           
            bubbleUp(parent);
        }
    }
}

2 个答案:

答案 0 :(得分:3)

就在这里

heap.add(parent, heap.get(child));
heap.add(child, tmp); 

您想要做的是交换元素。 two argument version of add仍会添加一个元素,而不是替换该位置的先前值。

改为使用set

答案 1 :(得分:2)

add(int,Object)很可能是插入。试试set(int,Object)