我只是想将一些类对象插入到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
答案 0 :(得分:-1)
您的注释代码中出现异常(假设它不是
)//PriorityQueue<Node> serverLog = new PriorityQueue<Node>((Collection<? extends Node>) new MyComp());
PriorityQueue
没有只接受Comparator
的构造函数。你显然无法将MyComp
投射到Collection
。
我只是想将一个类对象插入到优先级队列中 的java
使用接受initialCapacity
和Comparator
。
int initialCapacity = ...; // some value
PriorityQueue<String> serverLog = new PriorityQueue<>(initialCapacity , comparator);
如果您想使用自定义Comparator
。