所以基本上這是我的問題......我有2個結構LinkedList,和優先級闕(BinaryHeap)。遍歷列表,而從中刪除
LinkedList中充滿了我自己的對象,我想循環遍歷列表,如果滿足條件,請從列表中刪除並將其放回優先級隊列中。除了當我的條件是大小時,當我移除時,它會改變大小,因此從不檢查我的整個列表。
goodJobs是一個LinkedList。 jobList是我目前空的BinaryHeap。
的原始靈感:
for (int i = 0; i < goodJobs.size(); i++) {
if (((Job) goodJobs.get(i)).getArrivalTime() > time) {
jobList.insert((Comparable) goodJobs.remove(i));
}
}
這並沒有爲我上面提到的原因,工作,所以反而,我想用一個定點對象來檢測列表的末尾,而不是使用的大小列表。使用Java的迭代器...
ListIterator i;
int k = 0;
for (i = goodJobs.listIterator(); i.hasNext(); i.next()) {
if (((Job) goodJobs.get(k)).getArrivalTime() > time) {
jobList.insert((Comparable) goodJobs.remove(k));
}
k++;
}
然後我很快了解到,雖然修改它(從它刪除),通過ConcurrentModificationException的,你不能從列表中刪除。
我不確定如何繞過這裏的十字路口。該方法的想法是,在BinaryHeap中,我有一堆對象,我想刪除那些有「ArrivalTime」(通過輸入文件指定),>程序當前時間的對象。
這裏是整個方法本身:
private LinkedList findCandidates() {
LinkedList goodJobs = new LinkedList();
while (!jobList.isEmpty()) {
goodJobs.add(jobList.deleteMinimum());
}
for (int i = 0; i < goodJobs.size(); i++) {
if (((Job) goodJobs.get(i)).getArrivalTime() > time) {
jobList.insert((Comparable) goodJobs.remove(i));
}
}
return goodJobs;
}