Segundo o livro da Kathy Sierra página 322.
Depois que li esse pedaço, que fui entender o porque de gerar aqueles números estranhos quando não estava ordenado…
As buscas bem-sucedidas retornam o índice do elemento sendo procurado.
Buscas mal-sucedidas retornam um índice int que representa o ponto de inserção. O ponto de inserção é o lugar no conjunto/array onde o elemento seria inserido para manter o conjunto / array corretamente classificado. Pelo fato de valores de retorno positivos e 0 indicarem buscas bem-sucedidas, o método binarySearch() usa números negativos para indicar pontos de inserção. Uma vez que 0 é um resultado válido para uma busca bem-sucedida, o primeiro ponto de inserção. Uma vez que 0 é um resultado válido para uma busca bem-sucedida , o primeiro ponto de inserção disponível é -1. Assim o ponto de inserção é realmente representadoo com (-(ponto de inserção - 1) .Por exemplo, se o ponto de inserção de uma busca estiver no elemento 2, a valor real do ponto retornado será -3.
A coleção/array onde está sendo feita a busca deve ser classificado antes que você possa procurar por nele.
Se você tentar procurar em um array ou coleção que ainda não foi classificado, os resultados da busca não serão previsíveis.
Se a coleção/array em que você deseja procurar tiver sido classificado na ordem natural, a busca deve ser feita nessa mesma ordem. (Isso é feito ao NÃO se enviar um Comparator como argumento para o método binararySearch(). )
Se a coleção /array em que você deseja procurar tiver sido classificado com um Comparator, a busca deve ser feita usando-se o mesmo o Comparator, que é passado como o segundo argumento ao método binarySearch(). Lembre-se de que Comparators não podem ser usados ao se buscar em arrays de tipos primitivos.