0

我有一个项目列表,for loop我正在尝试比较此列表,但列表生成ArrayOutOfBoundsException

列表for loop中有 4 个项目(0,1,2,3),但在我尝试访问最后一个项目时,只有 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);
            }
        }
4

3 回答 3

2

那是因为当你删除元素时,你会缩小列表的大小,从而缩短循环。

当您想在迭代时删除元素时,请使用专用列表迭代器,此操作是安全的:

    Iterator<Relatorio> it = relatorios.iterator();
    while (it.hasNext())
        if (...) {
            it.remove();
        }
    }
于 2013-04-01T17:00:26.833 回答
2

您不应该从非迭代器循环中删除项目。

考虑改为这样做

for( Iterator<Realtorio> iter = realtorios.iterator( ); iter.hasNext( ); )
{
   Relatorio cur = iter.next( );

   if(!contem(cur)){
      iter.remove( );
   }
}
于 2013-04-01T17:01:18.243 回答
0

您无法在迭代列表中的项目时对其进行删除。您必须使用迭代器上的 remove 来执行此操作。
见这篇文章

于 2013-04-01T17:02:24.717 回答