0Pricing
Java Academy · Aula

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

  1. Arrays.sort e Ordenação
  2. Arrays.binarySearch
  3. Arrays.fill e copyOf
  4. Arrays.equals e toString
← Voltar para Java Academy