0Pricing
Java Academy · Lección

Arrays.binarySearch

Busque en arrays ordenados

Arrays.binarySearch es una lección gratuita de Java Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Java Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Java Academy incluye 4 lecciones en total.

Buscar en arrays ordenados

Arrays.binarySearch encuentra un elemento en un array ordenado en tiempo O(log n). Divide repetidamente por la mitad el rango de búsqueda, lo que es mucho más rápido que recorrer todos los elementos.

El requisito de que esté ordenado

El array debe estar ordenado previamente de forma ascendente. Si no lo está, el resultado no está definido. Use siempre Arrays.sort antes si no está seguro.

Una búsqueda básica

Cuando encuentra el valor, binarySearch devuelve su í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);
    }
}

Cuando falta el valor

Si el valor no está presente, el valor devuelto es negativo: equivale a -(insertionPoint) - 1. El punto de inserción es la posición que ocuparía el valor para mantener el 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);
    }
}

Obtener el punto de inserción

Para convertir un resultado negativo en el índice de inserción, calcule -(result) - 1. Esto le indica dónde insertar el valor que falta.

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);
        }
    }
}

Buscar en arrays de objetos

binarySearch también funciona con arrays de objetos mediante el orden natural. El array debe estar ordenado de la misma forma en que compara la búsqueda.

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);
    }
}

Buscar con un Comparator

Si el array se ordenó con un Comparator personalizado, debe pasar el mismo Comparator a binarySearch; de lo contrario, los resultados no tendrán sentido.

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);
    }
}

Buscar en un rango

Puede limitar la búsqueda a una parte del array con binarySearch(array, fromIndex, toIndex, key). Los límites del rango siguen la misma regla de inclusión y exclusión que 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);
    }
}

No se especifica qué duplicado se devuelve

Si el array contiene valores duplicados, no hay ninguna garantía sobre qué índice coincidente se devuelve. La búsqueda binaria resulta más adecuada para arrays con claves únicas.

¿Por qué no usar un bucle?

Un recorrido lineal es O(n) y funciona con datos sin ordenar. La búsqueda binaria es O(log n), pero requiere datos ordenados. Para realizar búsquedas repetidas en conjuntos de datos grandes, ordenar una vez y usar la búsqueda binaria muchas veces ofrece una gran ventaja.

Integrarlo todo

Ordene, busque e interprete el resultado de forma segura.

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));
        }
    }
}

Comprobación rápida

Compruebe sus conocimientos sobre binarySearch.

Resumen

Ha aprendido a realizar búsquedas rápidas con Arrays.binarySearch.

  • El array debe ordenarse primero.
  • Un resultado no negativo es el índice encontrado.
  • Un resultado negativo codifica el punto de inserción como -(result) - 1.
  • Use el mismo Comparator para ordenar y buscar.

Preguntas frecuentes

¿La lección «Arrays.binarySearch» es gratis?

Sí — el texto completo de «Arrays.binarySearch» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Java Academy, actualiza a CoddyKit PRO. El curso de Java Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Arrays.binarySearch»?

Busque en arrays ordenados Practicas Java Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Java Academy?

No se requiere experiencia previa. Java Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Arrays.binarySearch»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Java Academy?

Sí. Cada lección de Java Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Arrays.sort y ordenación
  2. Arrays.binarySearch
  3. Arrays.fill y copyOf
  4. Arrays.equals y toString
← Volver a Java Academy