【问题标题】:List java do not work on loop列出 java 在循环中不起作用
【发布时间】:2013-03-22 18:45:48
【问题描述】:

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

【问题讨论】:

标签: java oop for-loop


【解决方案1】:

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

考虑改为这样做

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

   if(!contem(cur)){
      iter.remove( );
   }
}

【讨论】:

    【解决方案2】:

    那是因为当你移除元素时,你让列表变小了,从而缩短了循环。

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

        Iterator<Relatorio> it = relatorios.iterator();
        while (it.hasNext())
            if (...) {
                it.remove();
            }
        }
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-08
        • 1970-01-01
        • 2023-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多