我的插入方法有问题。当我去添加一个需要交换的数字时,我得到一个超出范围的索引异常。这里: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));
}
}
}
答案 0 :(得分:0)
我认为你的意思是Collections.swap(table, parent, child);
? ArrayList.get
将在索引处返回元素(Java ArrayList API)Collections.swap
交换索引(Java Collections API)处的元素。您希望传递索引,而不是索引处的值。另外我认为在你的while循环中你可能想要更新child和parent。