Java の優先キューにいくつかのクラス オブジェクトを挿入しようとしています。しかし、「com.java.split.MyComp は java.util.Collection にキャストできません」というエラーが発生します。さまざまなパラメーターを渡してさまざまなオプションを試しましたが、
PriorityQueue<Node> serverLog = new PriorityQueue<Node>();
コード:
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;
}
}
しかし、どれも機能していません。私は例外を受けています、
スレッド「メイン」の例外 java.lang.ClassCastException: com.java.split.Node を java.util.PriorityQueue.siftUpComparable(不明なソース) で java.lang.Comparable にキャストできません java.util.PriorityQueue.siftUp(Unknown)ソース) で java.util.PriorityQueue.offer(不明なソース) で java.util.PriorityQueue.add(不明なソース) で com.java.split.Split.main(Split.java:19)
Comparator を実装して比較メソッドをオーバーライドすることを提案する投稿がたくさんありましたが、修正できませんでした。挿入するオブジェクトの数がわかりません。これを機能させるために何ができるかを親切に提案してください。
ありがとうございました!!-バラ