使用arraylist实现堆

时间:2012-04-27 16:14:14

标签: java data-structures arraylist heap

我的插入方法有问题。当我去添加一个需要交换的数字时,我得到一个超出范围的索引异常。这里:Collections.swap(table,table.get(parent),table.get(child));这就是我添加到堆中的方式。 tHeap.insert(14);谢谢你的帮助。

    public class Heap {
private ArrayList<Integer> table;

public Heap() {
    table = new ArrayList<Integer>();
}

public void insert(Integer toInsert) {
    table.add(toInsert);
    int child = table.size() - 1;
    int parent = (child - 1) / 2;
    //TextIO.putln("1  " + parent + " " + toInsert + " " + child);
    while (parent >= 0 && table.get(parent) > table.get(child)) {
        TextIO.putln("Swapping: " + parent + " Parent for Child: " + child);
        Collections.swap(table, table.get(parent), table.get(child));
    }

}

public void printTable() {
    for (int i = 0; i < table.size(); i++) {
        TextIO.putln("Index: " + i + " Data: " + table.get(i));

    }

}
    }

1 个答案:

答案 0 :(得分:0)

我认为你的意思是Collections.swap(table, parent, child);ArrayList.get将在索引处返回元素(Java ArrayList APICollections.swap交换索引(Java Collections API)处的元素。您希望传递索引,而不是索引处的值。另外我认为在你的while循环中你可能想要更新child和parent。