Saca una traza de que es lo que estas guardando en el arraylist, y por si acaso añade esto.
Código:
int idrn = lunVO.getIdrn();
pst.setInt(1,idrn);
resultSet = pst.executeQuery();
ArrayList lista= new ArrayList();
while(resultSet.next()){
lunVO = new lunVO();
lunVO.setIdrn(idrn);
lunVO.setL3(resultSet.getString("horario_lunes"));
lunVO.setL4(resultSet.getString("clase_lunes"));
lista.add(lunVO);
}//// fin del while
Un arraylist no es mas que una lista de punteros ( a groso modo), al no inicializar en cada paso el lunVO, es muy posible que siempre te este añadiendo el mismo objeto en la lista. Si pasas 5 veces por el while, 5 veces que te añadira el mismo objeto.
No se si me explico.
Saludos.