我有一个项目列表,在for loop
我正在尝试比较此列表,但列表会生成ArrayOutOfBoundsException
。
在for loop
中,列表中有4个项目(0,1,2,3),但是当我尝试访问最后一个项目时,for for只有3个(0,1,2),例外是提高。
List<Relatorio> relatorios = new RelatorioDao().listaTudoEmpresa(userWeb.logado);
for(int i = 0; i < relatorios.size(); i++){
if(!contem(relatorios.get(i))){
relatorios.remove(i);
}
}
答案 0 :(得分:2)
那是因为当你删除元素时,你会使列表大小变小,从而缩短循环。
如果要在迭代时删除元素,请使用专用列表迭代器,这对于此操作是安全的:
Iterator<Relatorio> it = relatorios.iterator();
while (it.hasNext())
if (...) {
it.remove();
}
}
答案 1 :(得分:2)
您不应该从非迭代器循环中删除项目。
考虑改为
for( Iterator<Realtorio> iter = realtorios.iterator( ); iter.hasNext( ); )
{
Relatorio cur = iter.next( );
if(!contem(cur)){
iter.remove( );
}
}
答案 2 :(得分:0)
当您迭代它时,您无法对列表中的项目执行删除操作。您必须使用迭代器上的remove来执行此操作 See This post