我正在将HeapInterface实现为最大堆。我只能添加一个元素,并成功删除它。添加任何其他元素后,我的比较代码无法将较大的数组元素置于索引1。
在实现泛型时,我正在使用compareTo()
方法。这似乎效果不佳。我什至尝试使用此代码对数组进行排序,但得到了空指针异常。
我必须完成最大堆的生成,然后实施“确保容量”方法。之后,我将使用此代码创建优先级队列。
我试图按升序对数组进行排序,但没有用。
public void sortArray() {
T temporaryV;
for (int i = 0; i < numberOfElements; i++) {
for (int j = i + 1; j < numberOfElements; j++) {
if (elements[i].compareTo(elements[j])<0) {
temporaryV = elements[j];
elements[j] = elements[i];
elements[i] = temporaryV;
}
}
}
}
这是我课程的开始
public class MaxHeap<T extends Comparable<? super T>> implements HeapInterface<T> {
private T[] elements;
private static final int DEFAULT_CAPACITY = 10;
int numberOfElements = 0;
public MaxHeap() {
this(DEFAULT_CAPACITY);
}
@SuppressWarnings("unchecked")
public MaxHeap(int capacity) {
elements = (T[]) new Comparable[capacity + 1];
}
//add method
public void add(T item) {
numberOfElements++;
elements[numberOfElements]=item;
}
public T remove() {
T returnValue = elements[1];
if (numberOfElements == 0) {
return null;
}
for (int i = 1; i < numberOfElements; i++) {
elements[i] = elements[i + 1];
}
numberOfElements--;
return returnValue;
}
现在我的测试用例如下
import org.junit.Test;
import junit.framework.TestCase;
public class TestMaxHeap extends TestCase {
@Test
public <T> void test() {
MaxHeap max = new MaxHeap();
max.add(500);
max.add(600);
max.add(800);
assertEquals(800,max.remove());
}
}
JUnit预期为800,但为<500>
我知道我需要使用Comparable
类来确定数组的顺序,但是由于不确定Null指针异常,因此我不确定在哪里以及如何执行此操作。