我迷失在代码中。我试图将返回的值添加到ArrayList中。打印返回的值,我试图将其强制转换,以便将其添加到ArrayList中。但似乎没有任何工作。
我在public void getHeap()
并且喜欢从return
检索public double remove()
值以添加到ArrayList中。它不断告诉我source not found
。有什么帮助吗?
谢谢!
public class MinHeap<E extends Comparable<E>> {
List<E> h = new ArrayList<E>();
ArrayList<Double> arrayPostingsList = new ArrayList<Double>();
public void getHeap() {
MinHeap<Double> heap = new MinHeap<Double>(new Double[]{0.5015530788463572, 0.5962770626486013, 0.4182157748994399});
ArrayList<Double> newArray = new ArrayList<Double>();
System.out.println();
while (!heap.isEmpty()) {
System.out.println(heap.remove());
newArray.add(heap.remove());
}
}
public double remove() {
E removedNode = h.get(0);
E lastNode = h.remove(h.size() - 1);
percolateDown(0, lastNode);
return (Double) removedNode;
}
public MinHeap() {
}
public MinHeap(E[] keys) {
for (E key : keys) {
h.add(key);
}
for (int k = h.size() / 2 - 1; k >= 0; k--) {
percolateDown(k, h.get(k));
}
}
public void add(E node) {
h.add(null);
int k = h.size() - 1;
while (k > 0) {
int parent = (k - 1) / 2;
E p = h.get(parent);
if (node.compareTo(p) >= 0) {
break;
}
h.set(k, p);
k = parent;
}
h.set(k, node);
}
public E min() {
return h.get(0);
}
public boolean isEmpty() {
return h.isEmpty();
}
void percolateDown(int k, E node) {
//....
}
}
答案 0 :(得分:1)
请尝试使用此代码:
public E remove() {
E removedNode = h.get(0);
E lastNode = h.remove(h.size() - 1);
percolateDown(0, lastNode);
return removedNode;
}
此外,我认为arrayPostingList
应该是E
类型,而不是Double
。
答案 1 :(得分:0)
您正在拨打remove()
两次:
while (!heap.isEmpty()) {
System.out.println(heap.remove());
newArray.add(heap.remove());
}
在最后一次迭代中,当只剩下一个项目时,第二次调用将失败。
我认为你的意图是:
while (!heap.isEmpty()) {
final Double removed = heap.remove();
System.out.println(removed);
newArray.add(removed);
}