2013-09-26 2 views
-1

Я просто пытаюсь вставить некоторые объекты класса в очередь приоритетов в java. Но получение ошибки «com.java.split.MyComp не может быть передано в java.util.Collection». Я пробовал разные варианты, передав другой параметр, чтобы,класс не может отличить от java.util.collection Exception

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.lang.Comparable на java.util.PriorityQueue.siftUpComparable (Unknown Source) в java.util.PriorityQueue.siftUp (Unknown Source) в java.util.PriorityQueue.offer (Unknown Source) в java.util.PriorityQueue.add (Unknown Source) в com.java.split.Split. main (Split.java:19)

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

спасибо !! -Bala

+1

Какая строка линии 41? –

+0

Извините, я изменил код и удалил несколько нежелательных строк печати. ошибка ссылается на этот оператор PriorityQueue serverLog = new PriorityQueue (); –

+0

Покажите нам точный код, который вы используете, точное сообщение об ошибке, и сообщите нам, к какой строке он относится. Ваш код не скомпилирован: myComp! = MyComp –

ответ

0

Ваше исключение происходит в вашем коде комментировал (если он не был

//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.

+0

Я не знаю значение initialCapacity. Он очень большой и продолжает меняться. извините, я упомянул его как «объект класса». Я изменил его –

+0

@ sbala_20 Емкость 'PriorityQueue' изменяет размеры, как это необходимо. –

+0

Благодарим за указание. Будет ли очередь приоритетов реструктурироваться, когда каждый раз, когда я добавляю новый элемент? Это замедляет работу? Мне нужно добавить много элементов здесь. –

Смежные вопросы