我正在尝试使用链表实现从头开始创建一个优先级队列ADT。在优先级队列中,我需要插入作业,作业必须按优先级顺序执行。我构造的优先级ADT来自我的Java书,而我的Job类是由我创建的。我可以将所有作业插入到优先级队列中,但是当我尝试removeMin()时,我得到了一个cannot cast类...错误。
这是我的方法,获取一个数组,将它们放入队列中,然后删除它们。
public static void executeJobs(Job[] jobInputArray) {
SortedPriorityQueue pq = new SortedPriorityQueue();
for(int j = 0; j < jobInputArray.length; j++) {
pq.insert(jobInputArray[j].getFinalPriority(), jobInputArray[j]);
jobInputArray[j].setEntryTime(j+1);
}
int cycles = 0;
while(!pq.isEmpty()) {
Job currentJob = (Job) pq.removeMin();
System.out.println(currentJob.getJobName());
}
}这个问题出现在我的: Job currentJob = (Job) pq.removeMin();行中。
这是我的SortedPriorityQueue类:
public static class SortedPriorityQueue<K,V> extends AbstractPriorityQueue<K,V>{
private PositionalList<Entry<K,V>> list = new LinkedPositionalList<>();
public SortedPriorityQueue() { super(); }
public SortedPriorityQueue(Comparator<K> comp) {super(comp);}
public Entry<K,V> insert(K key, V value) throws IllegalArgumentException{
checkKey(key);
Entry<K,V> newest = new PQEntry<>(key,value);
Position<Entry<K,V>> walk = list.last();
while(walk != null && compare(newest, walk.getElement()) < 0)
walk = list.before(walk);
if(walk == null)
list.addFirst(newest);
else
list.addAfter(walk, newest);
return newest;
}
public Entry<K,V> min(){
if (list.isEmpty()) return null;
return list.first().getElement();
}
public Entry<K,V> removeMin(){
if(list.isEmpty()) return null;
return list.remove(list.first());
}
public int size() {return list.size();}}
非常感谢您的帮助..提前感谢!
发布于 2020-11-14 06:12:16
removeMin返回一个Entry<K,V>,而不是一个Job。它不能强制转换为Job。缺少Entry的实现,但我假设它有一个value()或getValue()方法:
Job currentJob = (Job) pq.removeMin().getValue();https://stackoverflow.com/questions/64828592
复制相似问题