2013-04-01 6 views
0

항목 목록이 있으며 for loop에이 목록을 비교하려고 시도하지만 목록은 ArrayOutOfBoundsException입니다.목록 java가 루프에서 작동하지 않습니다.

목록에는 4 개의 항목 (0,1,2,3)이 있지만 마지막 항목에 액세스하려고하면 for (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

여기에 예외 스택 추적이지나갑니다! –

+0

가능한 복제본 [주어진 기준에 따라 ArrayList에서 객체 제거] (http://stackoverflow.com/questions/13316629/remove-objects-from-an-arraylist-based-on-a-given-criteria) –

답변

2

당신은 비 반복자 루프에서 항목을 제거해서는 안된다.

당신이 그것을 통해 반복 될 때이 대신

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

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

잘 작동합니다. – gmlyranetwork

2

요소를 제거하면 목록 크기가 작아 져서 루프가 짧아지기 때문입니다. 당신이 반복하면서 요소를 제거 할 때

는 전용리스트 반복자를 사용하여,이 작업에 대한 안전 :

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

당신이 목록의 항목에 삭제를 할 수없는 일을 생각해 보자. 그렇게하려면 반복기에있는 remove를 사용해야합니다.
See This post.

관련 문제