对于我的数据结构类,我们的作业是创建一个通用堆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