Класс не может быть приведен к исключению java.util.collection

Я просто пытаюсь вставить некоторые объекты класса в очередь с приоритетами в 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 в java.util.PriorityQueue.siftUpComparable(Неизвестный источник) в java.util.PriorityQueue.siftUp(Неизвестно Источник) в java.util.PriorityQueue.offer(Неизвестный источник) в java.util.PriorityQueue.add(Неизвестный источник) в com.java.split.Split.main(Split.java:19)

Было много постов, предлагающих реализовать Comparator и метод сравнения override, но я не мог это исправить. Я не знаю номер объекта, который я собираюсь вставить. пожалуйста, предложите, что можно сделать, чтобы сделать эту работу?

Спасибо!! -Bala

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,

Другие вопросы по тегам