java.lang.IndexOutOfBoundsException

Utilizo ArrayList para almacenar las 'sombras' para cada rectángulo en el nivel, pero cuando hago iteraciones como estas:

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]);
}

Yo tengo unjava.lang.IndexOutOfBoundsException error que se ve así:Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 42, Size: 79

¿Por qué recibo el error incluso si el número del índice no es igual o mayor que el tamaño? El programa todavía funciona como siempre, pero aún así no quiero que tenga ningún error.

También he intentado un bucle forzado pero luego me sale unjava.util.ConcurrentModificationException en lugar

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]);
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta