所以基本上这是我的问题......我有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;
}