對於我的數據結構類,我們的作業是創建一個通用堆ADT。在siftUp()方法中,我需要做比較,如果父項較小,我需要進行交換。我遇到的問題是比較運算符在泛型類型上無效。我相信我需要使用Comparable接口,但根據我的理解,使用數組不是一個好主意。我也搜索這個網站,我發現關於這個職位沒有人幫我找到解決方案泛型堆中的比較運算符
我刪除了一些代碼,這是不相關的有用信息 感謝
public class HeapQueue<E> implements Cloneable {
private int highest;
private Integer manyItems;
private E[] data;
public HeapQueue(int a_highest) {
data = (E[]) new Object[10];
highest = a_highest;
}
public void add(E item, int priority) {
// check to see is priority value is within range
if(priority < 0 || priority > highest) {
throw new IllegalArgumentException
("Priority value is out of range: " + priority);
}
// increase the heaps capacity if array is out of space
if(manyItems == data.length)
ensureCapacity();
manyItems++;
data[manyItems - 1] = item;
siftUp(manyItems - 1);
}
private void siftUp(int nodeIndex) {
int parentIndex;
E tmp;
if (nodeIndex != 0) {
parentIndex = parent(nodeIndex);
if (data[parentIndex] < data[nodeIndex]) { <-- problem ****
tmp = data[parentIndex];
data[parentIndex] = data[nodeIndex];
data[nodeIndex] = tmp;
siftUp(parentIndex);
}
}
}
private int parent(int nodeIndex) {
return (nodeIndex - 1)/2;
}
}
當我在Comparable上擴展E時,我在構造函數 data =(E [])new Object [10]中得到了一個轉換錯誤; [Ljava.lang.Object;不能轉換爲[Ljava.lang.Comparable; class HeapQueue> –
Chad
2011-04-22 02:04:50
@Char:只需改用ArrayList即可。 –
2011-04-22 11:40:21
我想出了鑄造錯誤......我忘了將Object更改爲類型Comparable。感謝您的幫助 – Chad 2011-04-22 17:00:13