Arrays.binarySearch
Pesquise em matrizes ordenadas
Arrays.binarySearch é uma aula grátis de Java Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Java Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Java Academy inclui 4 aulas no total.
Pesquisando em arrays ordenados
Arrays.binarySearch encontra um elemento em um array ordenado em tempo O(log n). Ele reduz repetidamente o intervalo de pesquisa pela metade, sendo muito mais rápido do que examinar cada elemento.
A pré-condição de ordenação
O array já deve estar ordenado em ordem crescente. Se não estiver, o resultado será indefinido. Sempre use Arrays.sort primeiro quando não tiver certeza.
Uma pesquisa básica
Quando o valor é encontrado, binarySearch retorna seu índice.
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] nums = {2, 4, 6, 8, 10};
int index = Arrays.binarySearch(nums, 8);
System.out.println("Found at index " + index);
}
}Quando o valor está ausente
Se o valor não estiver presente, o valor retornado será negativo: ele será igual a -(insertionPoint) - 1. O ponto de inserção é o local onde o valor seria colocado para manter o array ordenado.
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] nums = {2, 4, 6, 8, 10};
int result = Arrays.binarySearch(nums, 5);
System.out.println("Raw result: " + result);
}
}Recuperando o ponto de inserção
Para transformar um resultado negativo no índice de inserção, calcule -(result) - 1. Isso informa onde inserir o valor ausente.
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] nums = {2, 4, 6, 8, 10};
int result = Arrays.binarySearch(nums, 5);
if (result < 0) {
int insertionPoint = -(result) - 1;
System.out.println("Would insert at index " + insertionPoint);
}
}
}Pesquisando em arrays de objetos
binarySearch também funciona em arrays de objetos usando a ordenação natural. O array deve estar ordenado da mesma forma usada pela pesquisa para fazer as comparações.
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
String[] names = {"Alice", "Bob", "Charlie", "Dave"};
int index = Arrays.binarySearch(names, "Charlie");
System.out.println("Charlie at index " + index);
}
}Pesquisando com um Comparator
Se o array foi ordenado com um Comparator personalizado, você deve passar o mesmo Comparator para binarySearch; caso contrário, os resultados não terão significado.
import java.util.Arrays;
import java.util.Comparator;
public class Main {
public static void main(String[] args) {
String[] names = {"Dave", "Charlie", "Bob", "Alice"};
Comparator<String> desc = Comparator.reverseOrder();
Arrays.sort(names, desc);
int index = Arrays.binarySearch(names, "Charlie", desc);
System.out.println("Index: " + index);
}
}Pesquisando um intervalo
Você pode limitar a pesquisa a parte do array com binarySearch(array, fromIndex, toIndex, key). Os limites do intervalo seguem a mesma regra de inclusão e exclusão de sort.
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] nums = {2, 4, 6, 8, 10, 12};
int index = Arrays.binarySearch(nums, 1, 5, 8);
System.out.println("Index: " + index);
}
}Duplicatas não são especificadas
Se o array contiver valores duplicados, não há garantia de qual índice correspondente será retornado. A pesquisa binária é mais adequada para arrays com chaves únicas.
Por que não usar apenas um laço
Uma pesquisa linear é O(n) e funciona com dados não ordenados. A pesquisa binária é O(log n), mas exige dados ordenados. Para pesquisas repetidas em grandes conjuntos de dados, ordenar uma vez e fazer muitas pesquisas binárias traz uma grande vantagem.
Juntando tudo
Ordene, pesquise e interprete o resultado com segurança.
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] ids = {40, 10, 30, 20};
Arrays.sort(ids);
int r = Arrays.binarySearch(ids, 30);
if (r >= 0) {
System.out.println("Found 30 at index " + r);
} else {
System.out.println("Not found; insert at " + (-(r) - 1));
}
}
}Verificação rápida
Teste sua compreensão sobre binarySearch.
Recapitulação
Você aprendeu a fazer pesquisas rápidas com Arrays.binarySearch.
- O array deve ser ordenado primeiro.
- Um resultado não negativo é o índice encontrado.
- Um resultado negativo codifica o ponto de inserção como
-(result) - 1. - Use o mesmo Comparator para ordenar e pesquisar.
Perguntas Frequentes
A aula “Arrays.binarySearch” é grátis?
Sim — o texto completo de “Arrays.binarySearch” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Java Academy, atualize para CoddyKit PRO. O curso de Java Academy inclui 4 aulas no total.
O que vou aprender em “Arrays.binarySearch”?
Pesquise em matrizes ordenadas Você pratica Java Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Java Academy?
Nenhuma experiência prévia é necessária. Java Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “Arrays.binarySearch”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Java Academy?
Sim. Cada aula de Java Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Arrays.sort e Ordenação
- Arrays.binarySearch
- Arrays.fill e copyOf
- Arrays.equals e toString