Mit Hilfe der Java-Arrays Binary Suchmethoden

Mit Hilfe der Java-Arrays Binary Suchmethoden

Die Arrays Klasse ist Teil der Java 2 Collections Framework und enthält zahlreiche statische Methoden zur Darstellung und Manipulation von Arrays, so dass sie unabhängig von den Details ihrer Darstellung manipuliert werden. Der heutige Artikel präsentiert die binarysearch () Methode; es setzt die binären (oder Halb Intervall) Suchalgorithmus, den Index eines Elements in einem sortierten Array zu finden.







Die Arrays Klasse ist Teil der Java 2 Collections Framework und enthält zahlreiche statische Methoden zur Darstellung und Manipulation von Arrays, so dass sie unabhängig von den Details ihrer Darstellung manipuliert werden. Unter anderem enthält es Methoden zum Sortieren, Suchen, Kopieren und den toString (), die Sie ausgeben ein Array als formatierte Liste ermöglicht. Der heutige Artikel präsentiert die binarysearch () Methode; es setzt die binären (oder Halb Intervall) Suchalgorithmus, den Index eines Elements in einem sortierten Array zu finden.

Wie die binären Suchalgorithmus Works

Wenn sie mit sortierten Arrays arbeiten, kann eine binäre Suche viel schneller als von Anfang bis Ende durch die Liste iterieren. Es funktioniert durch iterative oder die Hälfte der Array rekursiv beseitigen, bis entweder das Element gefunden wird oder die gesamte Liste erschöpft ist. Es ist viel wie 20 Fragen, außer, dass es wirklich die gleichen drei Fragen immer und immer wieder! Die java.util.Arrays Klasse hat eine überladene Version von binarysearch () für alle Arten von Objekten und Variablen, so, wie auch immer geartete mit dem Sie arbeiten, gibt es eine Version für Sie. Hier ist ein Beispiel zu verdeutlichen:

Sagen Sie, dass wir die folgende Liste von zehn char Datenelemente haben:

Wegen der fehlenden Buchstaben, man kann nicht einfach die Position des Buchstaben ‚n‘ mutmaßen. So rufen Sie die Arrays.binarySearch (char [] a, char-Taste) Methode:

Das Verfahren beginnt mit dem mittleren Elemente Index Ortung, wodurch die Verfahrenselemente in zwei Hälften aufgeteilt, wobei an diesem Punkt gibt es eine von drei Möglichkeiten:

  1. Die Elementposition niedriger ist als der auf halben Wege-Index.
  2. Die Elementposition größer ist als der Index auf halben Weg.
  3. Die Elementposition ist genau auf halben Index.

Im letzteren Fall wird der Elementindex einfach von der Funktion zurückgegeben. Normalerweise dauert es einige weiteren Iterationen des Prozesses, wodurch der Spaltabschnitt, der das gewünschte Element enthalten könnte den obigen Test gesetzt wird.







Unter Verwendung des Retour Insertion Punktwert

Wenn die Anordnung nicht den gewünschten Wert enthält, wobei das Element des Schlüssels, der als nächstes in der Reihe eingeführt werden würde, wird zurückgeführt. Das ist der Einfügemarke genannt. Es ist entweder der Index des ersten Elements größer als der Schlüssel oder die Länge des Arrays, wenn alle Elemente in dem Array sind kleiner als der angegebene Schlüssel. Da ganze Zahlen von 0 bis zu dem Array einer Länge minus gültige Ergebnisse für eine erfolgreiche Suche darstellen, wobei die erste zur Verfügung Einfügepunkt -1. Daher wird die tatsächliche Einfügepunkt als (- (Einfügepunkt) -1). Zum Beispiel, wenn der Einfügungspunkt einer Suche am Elemente 2 ist, das tatsächliche zurück Einfügepunkt wird -3 sein. Also, im Hinblick oben zu myarray wäre die Einfügemarke für das Zeichen ‚m‘ -9 obwohl die eigentliche Einfügemarke 8 sein würde.

Versuchen Sie nicht, nur noch mit einem Umsatz Algorithmus zu entwickeln. Das Kompliment Operator (

) Wird das zurück Einfügemarke in den realen für Sie konvertieren. Es klappt Bits um, so dass

2 ist gleich -3 und umgekehrt:

die korrekte Einfügemarke zu haben, ist alles schön und gut, aber wir haben noch etwas mit ihm zu tun. Wenn Sie jemals versucht haben, ein Element in einem Standard-Array einfügen, dann ist es nicht einfach. Die Arraylist-Klasse ist viel besser geeignet, um solche Operationen. Sie können keine Generika mit primitiven Typen verwenden, so char Werte auf ihre Zeichen Wrapper äquivalent umgewandelt werden müssen. Keine Konvertierung jedes Elements ist erforderlich, weil Autoboxing für uns, dass kümmert. Wir können dann die ADDs Arraylist (int index, Object-Wert) Verfahren der ‚m‘ char am Einfügepunkt hinzuzufügen:

Sollten Sie wünschen, eine primitive Array zu verwenden zurück zu gehen, werden Sie einen umgekehrten Prozess folgen. Zunächst wird eine neue myArray muss mit einem zusätzlichen Elemente für den ‚m‘ Wert geschaffen werden. Dann wird eine Schleife für jedes Array-Element verwendet einzustellen. Auch hier nimmt Autoboxing Pflege von Charakter der Umwandlung primitiv zu verkohlen:

Einzigartige vs. Nicht eindeutige Elemente

Wenn das Array mehrere Elemente mit dem angegebenen Wert enthält, gibt es keine Garantie, die wird man gefunden. Das ist, weil es keine Möglichkeit gibt, um sicher zu sein, dass mehrere Instanzen des gleichen Wertes bleiben erhalten, wenn die Anordnung in zwei Hälften geteilt wird. Wenn Sie irgendwelche Zweifel haben, dass alle der Array-Elemente eindeutig sind, können Sie eine HashSet aus einer Liste Arrays.asList () -Methode erstellen

Schlussfolgerung

Die Arrays.binarySearch () -Methode ist eine hocheffiziente Art und Weise in einer geordneten Liste zum Nachschlagen und Index. Best of all, brauchen Sie nicht auf irgendwelchen Bibliotheken von Drittanbietern angewiesen. Importieren Sie einfach die java.util.Arrays Klasse, und Sie sind gut zu gehen. In einem kommenden Artikel werden wir sehen, wie die Klasse Arrays verwenden, um Ihre Listen zu sortieren.

Rob Gravelle befindet sich in Ottawa, Kanada, und ist der Gründer von GravelleWebDesign.com. Rob hat Systeme für die Intelligenz bezogene Organisationen wie Canada Border Services, CSIS sowie für zahlreiche kommerzielle Unternehmen gebaut. E-Mail an Rob eine kostenlose Schätzung auf Ihrem Software-Projekt zu erhalten. Sollten Sie Rob und seine Firma mieten, werden Sie erhalten 15% Rabatt für die Erwähnung, dass Sie es hier zu hören!

In seiner Freizeit hat Rob ein versierter Gitarrist werden. und hat mehrere CDs veröffentlicht. Seine ehemalige Band, Elfenbein Ritter, wurde als ein Kanadas Top Hard Rock und Metal-Gruppen durch Brave Worte Magazin (Ausgabe # 92) bewertet. Hier klicken, um Robs iTunes Link zu gelangen.







In Verbindung stehende Artikel