-2

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 を実装して比較メソッドをオーバーライドすることを提案する投稿がたくさんありましたが、修正できませんでした。挿入するオブジェクトの数がわかりません。これを機能させるために何ができるかを親切に提案してください。

ありがとうございました!!-バラ

4

1 に答える 1

-1

コメントされたコードで例外が発生します(そうではなかったと仮定します

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

PriorityQueueだけを受け入れるコンストラクターはありませんComparatorMyCompそして、明らかに aを a にキャストすることはできませんCollection

クラスオブジェクトをJavaの優先キューに挿入しようとしています

initialCapacityanおよび aを受け入れるコンストラクターを使用しComparatorます。

int initialCapacity = ...; // some value
PriorityQueue<String> serverLog = new PriorityQueue<>(initialCapacity , comparator);

カスタムを使用する場合Comparator

于 2013-09-26T21:32:03.273 に答える