Schreiben einer Klasse, die in Java bestellt werden kann Ein kleines Standard-Memo

Einführung

Aus dem Buch "Neue und klare Java-Algorithmen und Datenstrukturen", Kapitel 3-3, zweiminütige Suche, gab es einen Standard, den Sie beim Schreiben von Java beachten sollten. Daher werde ich ihn in diesem Artikel zusammenfassen, einschließlich der zweiminütigen Suche. Es war.

Dichotomie mit Java

Java bietet eine Standardbibliothek von Methoden zum Dichotomisieren eines Arrays. Eine binarySearch Methode, die zur java.util.Arrays Klasse gehört.

Referenz: https://docs.oracle.com/javase/jp/8/docs/api/java/util/Arrays.html

Wie Sie im obigen Referenzlink sehen können, sind viele "binarySearch" -Methoden definiert, um verschiedene Elementtypen zu unterstützen. Beide dichotomisieren die Schlüsselwertelemente aus dem aufsteigenden sortierten Array (Ergebnisse sind undefiniert, wenn sie nicht aufsteigen). Wenn das Array einen Suchschlüssel enthält, wird der Index des Suchschlüssels zurückgegeben, und wenn er nicht vorhanden ist, wird (- (Einfügemarke) -1) zurückgegeben.

Dieses Mal konzentrieren wir uns auf die folgenden zwei Punkte.

static int binarySearch(Object[] a, Object key)
static <T> int binarySearch(T[] a, T key, Comparator<? super T> c)

static int binarySearch(Object[] a, Object key) Beurteilen Sie das Größenverhältnis von Elementen in einer natürlichen Reihenfolge. Bitte beachten Sie die folgenden Informationen zur natürlichen Bestellung.

Referenz: https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Comparable.html

Wenn Sie über ein Array von Typen verfügen, das die Schnittstelle "Comparable" im obigen Referenzlink implementiert, können Sie mit dieser Methode problemlos Code schreiben, um eine Dichotomie durchzuführen.

Ein kleiner Standard der Klassendefinition, der natürlich bestellt werden kann

Mit anderen Worten, selbst für Ihre eigene Klasse können Sie die natürliche Reihenfolge definieren, indem Sie diese "Vergleichbare" Schnittstelle implementieren, und Sie können diese Methode verwenden. Es ist eine gute Idee, sich an Folgendes als kleinen Standard zu erinnern.

Natürlich geordnete Klasse.java


public class Hoge implements Comparable<Hoge> {
    //Felder, Methoden usw.

    @Override
    public int compareTo(A c) {
        //Wenn dies größer als c ist, ein positiver Wert,
        //Wenn dies kleiner als c ist, ein negativer Wert,
        //Gibt 0 zurück, wenn dies gleich c ist.
    }

    @Override
    public boolean equals(Object c) {
        //Richtig, wenn dies gleich c ist,
        //Gibt false zurück, wenn dies nicht gleich c ist.
    }
}

Zu diesem Zeitpunkt kann Konsistenz erhalten werden, z. B. "Wenn die" conpareTo "-Methode 0 zurückgibt, gibt die" equals "-Methode true zurück, und wenn die" compareTo "-Methode ungleich Null zurückgibt, gibt die" equals "-Methode false zurück". Es wäre gut, dies zu tun.

static int binarySearch(T[] a, T key, Comparator<? super T> c) Diese Methode kann für eine Dichotomie aus einem Array verwendet werden, das in seiner natürlichen Reihenfolge nicht geordnet ist. Da es sich um eine generische Methode handelt, ist jedes Element des Arrays in Ordnung.

Sie müssen der Methode jedoch mitteilen, wie die Größenbeziehung jedes Elements bestimmt werden soll. Übergeben Sie dazu eine Instanz der Klasse, die die Schnittstelle java.util.Comparator als drittes Argument implementiert.

Ein kleiner Standard, der einen Komparator definiert

Ein Klassen-Fuga-Komparator kann beispielsweise wie folgt definiert werden: Es ist eine gute Idee, sich daran als kleinen Standard zu erinnern.

Definieren Sie einen Komparator innerhalb der Klasse.java


public class Fuga {
    //Felder, Methoden usw.

    public static final Comparator<Fuga> COMPARATOR = new Comp();

    private static class Comp implements Comparator<Fuga> {
        public int compare(Fuga d1, Fuga d2) {
            //Wenn d1 größer als d2 ist, dann ist ein positiver Wert,
            //Negativer Wert, wenn d1 kleiner als d2 ist,
            //Gibt 0 zurück, wenn d1 gleich d2 ist.
        }
    }
}

Durch Übergabe von "Fuga.COMPARATOR" als drittes Argument der "binarySearch" -Methode kann die Größenbeziehung basierend auf dem definierten Komparator bestimmt und eine Dichotomie des Arrays vom Typ "Fuga" durchgeführt werden.

Recommended Posts

Schreiben einer Klasse, die in Java bestellt werden kann Ein kleines Standard-Memo
Schreiben Sie eine Klasse in Kotlin und nennen Sie sie in Java
Erstellen Sie eine JAR-Datei, die auf Gradle ausgeführt werden kann
Java (Super Beginner Edition), das in 180 Sekunden verstanden werden kann
[MQTT / Java] Implementierte eine Klasse, die Pub / Sub von MQTT in Java ausführt
Was ist eine Klasse in der Java-Sprache (3 /?)
Zusammenfassung von ORM "uroboroSQL", das in Enterprise Java verwendet werden kann
Was ist eine Klasse in der Java-Sprache (1 /?)
Was ist eine Klasse in der Java-Sprache (2 /?)
Erstellen einer Matrixklasse in Java Teil 1
So erstellen Sie ein Schlüsselpaar von ecdsa in einem Format, das von Java gelesen werden kann
Ich habe eine Klasse erstellt, die JUMAN und KNP aus Java verwenden kann
[Android Studio] Beschreibung, die kontinuierlich in die SQLite-Datenbank eingegeben werden kann [Java]
[Java] Implementieren Sie eine Funktion, die eine im Builder-Muster implementierte Klasse verwendet
GetInstance () aus einer @ Singleton-Klasse in Groovy aus Java
Eine Bat-Datei, die Java in Windows verwendet
Ein kurzer Überblick über Java, das im Unterricht gelernt wurde
Allzweck-StringConverter-Klasse, die Generika in Java8 verwendet
[Java 8] Bis zur Konvertierung von Standardeingaben, die beim Codieren von Tests verwendet werden können, in eine Liste oder ein Array
Melden Sie eine CSV-Datei ab, die von Excel mithilfe von Logback gelesen werden kann
Technologie-Auszug, mit dem EC-Sites in Java-Schulungen erstellt werden können
Grundlegende funktionale Schnittstelle, die in 3 Minuten verstanden werden kann
Ein kurzer Überblick über Java, das in Klasse 4 gelernt wurde
Ein kurzer Überblick über Java, das in Klasse 3 gelernt wurde
Ein kurzer Überblick über Java, das in Klasse 2 gelernt wurde
Praktische Tastenkombinationen für Eclipse
Eine Bibliothek, die mehrzeilige Zeichenfolgen in mehrzeiligen Java-Zeichenfolgen realisiert
Schreiben Sie die Klassenvererbung in Ruby
Schreiben Sie Flyway-Rückrufe in Java
Suchen Sie eine Teilmenge in Java
Schreiben Sie Java8-ähnlichen Code in Java8
Liste der Geräte, die mit Swift UI in der Vorschau angezeigt werden können
Probleme, die leicht mit Java und JavaScript verwechselt werden können
Einführung in Rakefile, die in ca. 10 Minuten durchgeführt werden kann
Suchen Sie eine Switch-Anweisung, die in einen Switch-Ausdruck konvertiert werden kann
Java 14 neue Funktionen, mit denen Code geschrieben werden kann
Syntax- und Ausnahmebedingungen, die beim Vergleich mit null in Java verwendet werden können
[Java 8] Sortiermethode in alphabetischer Reihenfolge und Reihenfolge der Zeichenkettenlänge, die für Codierungstests verwendet werden kann
Statisches Analysetool, das mit GitHub verwendet werden kann [Java-Version]
3 Implementieren Sie einen einfachen Interpreter in Java
Ich kann in IntelliJ keine Java-Klasse mit einem bestimmten Namen erstellen
So implementieren Sie einen Job, der die Java-API in JobScheduler verwendet
Behandeln Sie die Geschäftslogik für eine Reihe von Entitäten in einer Java-Klasse
Beachten Sie, dass Systemeigenschaften einschließlich JAXBContext in Java11 nicht verwendet werden können
Ich habe eine Sterling-Sorte geschrieben, die sich wie in Java anfühlt
StringBuffer- und StringBuilder-Klasse in Java
Ein einfaches Beispiel für Rückrufe in Java
SwiftUI-Ansicht, die in Kombination mit anderen Frameworks verwendet werden kann
Erstellen einer Klasse für eine Matrix in Java Teil 2 - Über eine Matrix (lineare Algebra) -
Es scheint, dass Java 14 Datenklassen-ähnliche Funktionen hinzufügen wird
Lassen Sie uns auf Deep Java Library (DJL) eingehen, eine von AWS veröffentlichte Bibliothek, die Deep Learning in Java verarbeiten kann.
Mecab-Installation, die fast durch Eingabe eines Befehls erfolgen kann
Bleiben Sie in einem Java Primer stecken
Wie schreibt man in Scala, die in Java geschrieben wurde? (Liste → Karte)
So testen Sie eine private Methode und verspotten sie teilweise in Java
[Java] Einführung des Dienstprogramms "ZT Zip", das ZIP-Dateien sehr einfach verarbeiten kann