列表java不适用于循环

时间:2013-04-01 16:58:25

标签: java oop for-loop

我有一个项目列表,在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);
            }
        }

3 个答案:

答案 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