Olá Ricardo, tudo bem?
Ao analisar o código que você postou, percebi que o problema está no laço de repetição for utilizado para percorrer a lista de cursos. O erro ocorre porque a condição do laço é i <= cursos.size(), ou seja, ele está tentando acessar um índice que não existe na lista. 
Para corrigir isso, você pode alterar a condição do laço para i < cursos.size(). Dessa forma, o laço irá percorrer todos os elementos da lista sem tentar acessar um índice inexistente.
Sobre a sua pergunta, não é necessário importar o método size() da classe ArrayList, pois ele já faz parte da biblioteca padrão do Java. 
Espero ter ajudado e bons estudos!