java.lang.IndexOutOfBoundsException

Eu uso o ArrayList para armazenar as 'sombras' de todos os retângulos do nível, mas quando iteramos o seguinte:

for(int n = 0; n < shadows.size(); ++n){
 g2d.fillPolygon(shadows.get(n)[0]);
 g2d.fillPolygon(shadows.get(n)[1]);
 g2d.fillPolygon(shadows.get(n)[2]);
 g2d.fillPolygon(shadows.get(n)[3]);
 g2d.fillPolygon(shadows.get(n)[4]);
 g2d.fillPolygon(shadows.get(n)[5]);
}

Eu recebo umjava.lang.IndexOutOfBoundsException erro que se parece com isso:Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 42, Size: 79

Por que eu recebo o erro, mesmo que o número do índice não seja igual ou superior ao tamanho? O programa ainda funciona normalmente, mas ainda não quero que ele tenha erros.

Eu também tentei um loop for encantado, mas então recebo umjava.util.ConcurrentModificationException em vez de

for(Polygon[] polys : shadows){
 g2d.fillPolygon(polys[0]);
 g2d.fillPolygon(polys[1]);
 g2d.fillPolygon(polys[2]);
 g2d.fillPolygon(polys[3]);
 g2d.fillPolygon(polys[4]);
 g2d.fillPolygon(polys[5]);
}

questionAnswers(2)

yourAnswerToTheQuestion