在maxheap中实现add和remove方法

时间:2019-05-04 04:26:11

标签: java heap

我正在将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指针异常,因此我不确定在哪里以及如何执行此操作。

0 个答案:

没有答案