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

时间:2013-09-26 21:28:02

标签: java priority-queue comparator

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

来尝试不同的选项
PriorityQueue<Node> serverLog = new PriorityQueue<Node>();

代码:

import java.util.Comparator; import 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;
    }
}

但没有一个有效。我得到例外,

线程“main”中的异常java.lang.ClassCastException:com.java.split.Node无法强制转换为java.lang.Comparable     at java.util.PriorityQueue.siftUpComparable(Unknown Source)     在java.util.PriorityQueue.siftUp(未知来源)     at java.util.PriorityQueue.offer(Unknown Source)     at java.util.PriorityQueue.add(Unknown Source)     在com.java.split.Split.main(Split.java:19)

有很多帖子建议实施Comparator并覆盖比较方法,但我无法修复它。我不知道我要插入的对象的数量。请建议如何做到这一点?

谢谢!! -Bala

1 个答案:

答案 0 :(得分:-1)

您的注释代码中出现异常(假设它不是

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

PriorityQueue没有只接受Comparator的构造函数。你显然无法将MyComp投射到Collection

  

我只是想将一个类对象插入到优先级队列中   的java

使用接受initialCapacityComparator

的构造函数
int initialCapacity = ...; // some value
PriorityQueue<String> serverLog = new PriorityQueue<>(initialCapacity , comparator);

如果您想使用自定义Comparator