1

除了 HeapPriorityQueue 构造函数中的比较器之外,我的堆优先级队列类中的每一行都没有错误。我不知道如何修复它,所以不会有错误。由于错误,我什至无法检查算法是否正常工作。有人可以帮帮我吗?

import java.util.ArrayList;
import java.util.Comparator;

public class HeapPriorityQueue<K extends Comparable<K>,V> implements PriorityQueue<K,V>     
{
    protected Comparator<K> comp;

    .
    .      //other lines of code
    .

    public HeapPriorityQueue() {
        heap = new ArrayList<Entry<K,V>>();
        heap.add(null);
        comp = new Comparator<K>();      //<-------- with error
    }

    .
    .      //other lines of code
    .

    comp.compare(oneKey,anotherKey);    //<---- using comp here

    .
    .      //other lines of code
    .

}
4

2 回答 2

3

Comparator是一个接口,所以你不能用new. 您可以使用匿名类将比较委托给对象:

comp = new Comparator<K>() {
    @Override
    public int compare(K a, K b) {
       return a.compareTo(b);
    }
}
于 2013-09-08T13:30:32.193 回答
0

我认为编译错误消息是可以自我解释的。线

comp = new Comparator<K>();

是试图实例化接口,因为Comparator它是一个接口。您应该创建自己的实现比较器的类或使用第三方类之一或创建匿名内部类。

于 2013-09-08T13:31:58.930 回答