Arrays.binarySearch
Durchsuchen Sie sortierte Arrays
Arrays.binarySearch ist eine kostenlose Java Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Java Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Java Academy-Kurs umfasst insgesamt 4 Lektionen.
Sortierte Arrays durchsuchen
Arrays.binarySearch findet ein Element in einem sortierten Array in O(log n)-Zeit. Dabei wird der Suchbereich wiederholt halbiert, was deutlich schneller ist, als jedes Element einzeln zu prüfen.
Voraussetzung: Das Array ist sortiert
Das Array muss bereits aufsteigend sortiert sein. Andernfalls ist das Ergebnis nicht definiert. Rufen Sie bei Unsicherheit zuerst Arrays.sort auf.
Eine einfache Suche
Wenn der Wert gefunden wird, gibt binarySearch seinen Index zurück.
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);
}
}Wenn der Wert fehlt
Wenn der Wert nicht vorhanden ist, ist der Rückgabewert negativ: Er entspricht -(insertionPoint) - 1. Der Einfügepunkt ist die Position, an der der Wert eingefügt werden müsste, damit das Array sortiert bleibt.
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);
}
}Den Einfügepunkt ermitteln
Um ein negatives Ergebnis in den Einfügeindex umzuwandeln, berechnen Sie -(result) - 1. So erfahren Sie, an welcher Stelle der fehlende Wert eingefügt werden müsste.
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);
}
}
}Objektarrays durchsuchen
binarySearch funktioniert auch bei Objektarrays und verwendet dabei die natürliche Ordnung. Das Array muss in derselben Reihenfolge sortiert sein, die auch beim Suchen verwendet wird.
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);
}
}Mit einem Comparator suchen
Wenn das Array mit einem benutzerdefinierten Comparator sortiert wurde, müssen Sie beim Aufruf von binarySearch denselben Comparator übergeben. Andernfalls sind die Ergebnisse bedeutungslos.
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);
}
}Einen Bereich durchsuchen
Mit binarySearch(array, fromIndex, toIndex, key) können Sie die Suche auf einen Teil des Arrays beschränken. Für die Grenzen gilt dieselbe Regel mit eingeschlossenem Anfang und ausgeschlossenem Ende wie beim Sortieren.
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);
}
}Duplikate liefern kein festgelegtes Ergebnis
Wenn das Array doppelte Werte enthält, gibt es keine Garantie, welcher passende Index zurückgegeben wird. Die binäre Suche eignet sich am besten für Arrays mit eindeutigen Schlüsseln.
Warum nicht einfach eine Schleife verwenden?
Eine lineare Suche hat O(n) und funktioniert auch bei unsortierten Daten. Die binäre Suche hat O(log n), setzt aber sortierte Daten voraus. Bei wiederholten Suchen in großen Datenbeständen ist es sehr vorteilhaft, einmal zu sortieren und anschließend viele binäre Suchen durchzuführen.
Alles zusammenführen
Sortieren Sie zuerst, suchen Sie anschließend und werten Sie das Ergebnis sicher aus.
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));
}
}
}Schnelltest
Testen Sie Ihr Verständnis von binarySearch.
Zusammenfassung
Sie haben die schnelle Suche mit Arrays.binarySearch kennengelernt.
- Das Array muss zuerst sortiert werden.
- Ein nicht negatives Ergebnis ist der Index des gefundenen Elements.
- Ein negatives Ergebnis codiert den Einfügepunkt als
-(result) - 1. - Verwenden Sie beim Sortieren und Suchen denselben Comparator.
Häufig gestellte Fragen
Ist die Lektion „Arrays.binarySearch“ kostenlos?
Ja — der vollständige Text von „Arrays.binarySearch“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Java Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Java Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Arrays.binarySearch“?
Durchsuchen Sie sortierte Arrays Du übst Java Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Java Academy zu starten?
Keine Vorkenntnisse erforderlich. Java Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.
Wie lange dauert die Lektion „Arrays.binarySearch“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Java Academy-Lektion Code schreiben und ausführen?
Ja. Jede Java Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Arrays.sort und Sortieren
- Arrays.binarySearch
- Arrays.fill und copyOf
- Arrays.equals und toString