我正在尝试使用链表实现从头开始创建优先级队列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());
}
}
问题出现在my: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();}
}
非常感谢您的帮助。。提前谢谢!
1条答案
按热度按时间svmlkihl1#
removeMin
返回一个Entry<K,V>
,不是Job
. 它不能投给Job
. 实施Entry
不见了,但我想它有一个value()
或者getValue()
方法: