Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
类无法强制转换为java.util.collection异常_Java_Priority Queue_Comparator - Fatal编程技术网

类无法强制转换为java.util.collection异常

类无法强制转换为java.util.collection异常,java,priority-queue,comparator,Java,Priority Queue,Comparator,我只是想在java中将一些类对象插入到优先级队列中。但是得到错误“com.java.split.MyComp不能转换为java.util.Collection”。我通过将不同的参数传递给 PriorityQueue<Node> serverLog = new PriorityQueue<Node>(); PriorityQueue serverLog=new PriorityQueue(); 代码: 导入java.util.Comparator; 导入java.uti

我只是想在java中将一些类对象插入到优先级队列中。但是得到错误“com.java.split.MyComp不能转换为java.util.Collection”。我通过将不同的参数传递给

PriorityQueue<Node> serverLog = new PriorityQueue<Node>();
PriorityQueue serverLog=new PriorityQueue();
代码:

导入java.util.Comparator; 导入java.util.PriorityQueue

public class Split {

    public static void main(String args[])
    {

        Comparator comparator = new MyComp();  

        PriorityQueue<Node> serverLog = new PriorityQueue<Node>(); 


        Node n1 = new Node(1,"one");
        serverLog.add(n1);

        Node n2 = new Node(1,"two");
        serverLog.add(n2);      <== Error Here (line 22)

        Node n3= new Node(1, "three");
        serverLog.add(n3);

    }

}

public class Node {

    private long timeStamp;
    private String log;

    public Node(long timeStamp, String log)
    {
        this.timeStamp = timeStamp;
        this.log = log;
    }

//getter and setter
}


public class MyComp implements Comparator {

    @Override
    public int compare(Object a, Object b) {

        long aTimeStamp = ((Node) a).getTimeStamp();
            long bTimeStamp = ((Node) b).getTimeStamp();


        if(aTimeStamp == bTimeStamp)
            return 0;
        else if (aTimeStamp < bTimeStamp)
            return 1;
        else
            return -1;
    }
}
公共类拆分{
公共静态void main(字符串参数[])
{
比较器比较器=新的mycop();
PriorityQueue serverLog=new PriorityQueue();
节点n1=新节点(1,“一”);
serverLog.add(n1);
节点n2=新节点(1,“两”);

添加(n2);您的异常发生在您的注释代码中(假设它不是

//PriorityQueue<Node> serverLog = new PriorityQueue<Node>((Collection<? extends Node>) new MyComp());

如果要使用自定义的
比较器

哪一行是第41行?很抱歉,我修改了代码并删除了一些不需要的打印输出stmt。错误引用了以下语句PriorityQueue serverLog=new PriorityQueue();向我们显示您使用的确切代码,确切的错误消息,并告诉我们它指的是哪一行。您的代码未编译:myComp!=MyCompPS。用大写字母命名类。例如,
Split
我不知道initialCapacity的值。它非常大,并且不断变化。很抱歉,我将其称为“类对象”1.我变了it@sbala_20
PriorityQueue
的容量会根据需要调整大小。感谢您指出。每次我添加新元素时,优先级队列是否会自我调整?这会降低性能吗?我需要在这里添加很多元素。@sbala_20查看Oracle源代码,它看起来像是我找不到任何地方可以缩小它的大小。
PriorityQueue
使用一个
Object[]
作为它的备份数据结构。复制数组的速度非常快(当你增加数组时会发生这种情况)。非常感谢你的回复!
int initialCapacity = ...; // some value
PriorityQueue<String> serverLog = new PriorityQueue<>(initialCapacity , comparator);