请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

toCreate.remove(i)是否有问题

BeanFactory类的initBean方法中的这一段

for (int i=0;i<toCreate.size();i++) {
    if (finishCreate(toCreate.get(i))) {
        toCreate.remove(i);
    }
}

ArrayList的revome(int index)方法删除后会让被删除的元素后的元素都向前移,
例如数组[0,1,2,3,4,5]
当i为0时,remove(i),数组就变成[1,2,3,4,5]
这时如果i++为1,则get(i)取出的就是2,1就漏掉了
这样会导致一次遍历不全

for (int i = 0; i < toCreate.size(); ) {
    if (finishCreate(toCreate.get(i))) {
        toCreate.remove(i);
    } else {
        i++;
    }
}

改成这样更严谨

正在回答 回答被采纳积分+3

4回答

_白月光_ 2019-09-25 16:57:40

要加上前面的while (toCreated.size()!=0) {}一块分析。

按你的逻辑

例如数组[0,1,2,3,4,5]
当i为0时,remove(i),数组就变成[1,2,3,4,5]
这时如果i++为1,则get(i)取出的就是2,1就漏掉了     

       此时              oCreated.size()!=0 成立。 

0 回复 有任何疑惑可以回复我~
慕仙0921264 2019-07-21 15:31:51

讲师那种写法就是错误的从list删除元素的做法

0 回复 有任何疑惑可以回复我~
二道桥十三太保 2019-07-12 00:49:28

我刚才看也在想这个问题,你搞清楚了告诉我一下

0 回复 有任何疑惑可以回复我~
bugs制造机 2019-07-06 14:57:57

遍历中可以用Iterator放入移除方法

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信