Java 在列表中进行迭代,同时从列表中删除

Java 在列表中进行迭代,同时从列表中删除,java,exception,iterator,Java,Exception,Iterator,所以基本上这是我的问题…我有两个结构一个是LinkedList,一个是Priority Que(二进制堆) LinkedList中充满了我自己的对象,我想在列表中循环,如果满足条件,请从列表中删除并将其放回优先级。除非当我的条件是大小时循环,当我删除时,它会改变大小,因此从不检查整个列表 goodJobs是一个链接列表。 作业列表是我当前的空二进制堆 创意: for (int i = 0; i < goodJobs.size(); i++) { if (((Job)

所以基本上这是我的问题…我有两个结构一个是LinkedList,一个是Priority Que(二进制堆)

LinkedList中充满了我自己的对象,我想在列表中循环,如果满足条件,请从列表中删除并将其放回优先级。除非当我的条件是大小时循环,当我删除时,它会改变大小,因此从不检查整个列表

goodJobs是一个链接列表。 作业列表是我当前的空二进制堆

创意:

    for (int i = 0; i < goodJobs.size(); i++) {
        if (((Job) goodJobs.get(i)).getArrivalTime() > time) {
            jobList.insert((Comparable) goodJobs.remove(i));
        }

    }
然后我很快了解到,在修改列表(从列表中删除)时,不能通过ConcurrentModificationException从列表中删除

我不知道怎么在这里过十字路口。该方法的思想是,在二进制堆中,我有一堆对象,我想删除那些具有“到达时间”(通过输入文件指定)、>程序当前时间的对象

以下是整个方法本身:

    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;
}
private LinkedList findCandidates(){
LinkedList goodJobs=新建LinkedList();
而(!jobList.isEmpty()){
add(jobList.deletemimum());
}
对于(int i=0;i时间){
作业列表。插入((可比)goodJobs。删除(i));
}
}
返回好工作;
}
Javadoc说(部分)

如果在迭代过程中以除调用此方法以外的任何方式修改了基础集合,则迭代器的行为是未指定的

您应该做的是获取
迭代器
并进行迭代(在满足条件时调用
remove()
)。大概

Iterator<Job> iter = goodJobs.iterator();
while (iter.hasNext()) {
    Job j = iter.next();
    if (j.getArrivalTime() > time) {
        jobList.insert(j);
        iter.remove();
    }
}
Iterator iter=goodJobs.Iterator();
while(iter.hasNext()){
Job j=iter.next();
if(j.getArrivalTime()>时间){
工作清单。插入(j);
iter.remove();
}
}

建议尝试使用CopyOnWriteArrayList而不是LinkedList

Iterator<Job> iter = goodJobs.iterator();
while (iter.hasNext()) {
    Job j = iter.next();
    if (j.getArrivalTime() > time) {
        jobList.insert(j);
        iter.remove();
    }
}