Professor, Creio que o algoritmo não está preparado para validar o cenário onde um elemento "maior" não é encontrado. Por exemplo, digamos que estamos buscando por uma nota 11, neste caso o algoritmo tentará buscar para a direita até que o de se torne igual ao tamanho do array:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 9
A seguinte condicional trata este cenário:
if(ate < de || de >= collection.length) {
return -1;
}
Faz sentido esta observação?