当我尝试删除列表时,我得到的列表大小大于列表大小+ 1

时间:2017-07-06 19:37:00

标签: java

List<Studentdb> list = teacherDao.viewstudent(facultyid, batchid1);
System.out.println("" + list);
int i = 0;
for (Iterator<Studentdb> s = list.iterator(); s.hasNext(); ) {
     System.out.println("" + i);
     System.out.println("list========" + list.get(i).getRoll());
     if (teacherDao.viewmarks(subjectcode, list.get(i).getRoll())) {
           list.remove(s);
     }
    i++;
}

当我尝试删除所选列表时,我收到错误java.lang.IndexOutOfBoundsException: Index: 3, Size: 3

这里我有列表大小3,即索引0 1 2,我在索引3中收到了错误。

3 个答案:

答案 0 :(得分:0)

从for循环中的列表中删除项目总是一团糟。

最好将所需的项目放在另一个列表中,或者如果使用Java 8使用流并过滤列表。

答案 1 :(得分:0)

你的代码有一个无限循环,因为它没有得到迭代器中的下一个项目。

因此,当i等于3时,您的代码正试图获取列表中的第4个元素,这就是您的原因所在得到这个例外。

您应该在next()对象中调用s方法。

答案 2 :(得分:0)

在到达大小为1的位置后,只需包含一个条件,使其中断。 我希望你很清楚,如果列表的大小为n,列表将从0转换为n-1。 在您的错误消息中,它实际上说的是,您正在尝试迭代到列表中已分配区域之外的项目。