用 Priorityqueue 替换 LinkedList。显示的错误是 java.lang.ClassCastException
Posted
技术标签:
【中文标题】用 Priorityqueue 替换 LinkedList。显示的错误是 java.lang.ClassCastException【英文标题】:replacing LinkedList with Priorityqueue. the error showing is java.lang.ClassCastException 【发布时间】:2021-10-05 16:03:24 【问题描述】:i have replaced the existing LinkedList with Priority queue which u can find in the image. and u can also find the error when i am running the loop
public static void main(String[] args)
// TODO code application logic here
Scanner input = new Scanner(System.in);
int sel;
PriorityQueue<Worker> userQueue = new PriorityQueue<>();
PriorityQueue<String> users = new PriorityQueue<>();
while(true)
System.out.print("1) Add job\n2) Run Jobs\n3) Clear Jobs\n4) Add User\n5) Print users\n0) Exit\n");
sel = getInteger(input);
if (sel == 0)
break;
else if (sel == 1)
System.out.print("1) Basic Job\n2) Repeating Job\n0) Cancel\n");
sel = getInteger(input);
if (sel == 1)
System.out.println("Enter job message");
String msg = input.nextLine();
msg = input.nextLine();
userQueue.offer(new Worker(msg));
// 我在 userQueue.offer(new Worker(msg)) 处遇到异常; //
Exception in thread "main" java.lang.ClassCastException: class cis265.Worker cannot be cast to class java.lang.Comparable (cis265.Worker is in module cis265_queue of loader 'app'; java.lang.Comparable is in module java.base of loader 'bootstrap')
at java.base/java.util.PriorityQueue.siftUpComparable(PriorityQueue.java:643)
at java.base/java.util.PriorityQueue.siftUp(PriorityQueue.java:639)
at java.base/java.util.PriorityQueue.offer(PriorityQueue.java:330)
at cis265_queue/cis265.Cis265_queue.main(Cis265_queue.java:63)
【问题讨论】:
请将您的代码显示为问题中的文本,如minimal reproducible example。 你还需要显示你得到的异常,并在代码中指出它发生的行。 【参考方案1】:根本问题是您试图将某些东西放入一个订单中,而没有告诉 Java 该订单应该是什么。
见Javadoc:
依赖自然排序的优先级队列也不允许插入不可比较的对象(这样做可能会导致
ClassCastException
)。
所以,要么让你的Worker
实现Comparable
,要么为PriorityQueue
的构造函数提供一个Comparator
。
【讨论】:
以上是关于用 Priorityqueue 替换 LinkedList。显示的错误是 java.lang.ClassCastException的主要内容,如果未能解决你的问题,请参考以下文章