Finden der drittkleinsten Zahl in Java: Eine vollständige Anleitung

Veröffentlicht: 2023-08-23

Haben Sie sich jemals gefragt, wie Sie effizient die drittkleinste Zahl in einem Array, einer Liste oder einem Stream von Ganzzahlen finden können? In diesem Blogbeitrag tauchen wir in die Welt der Java-Programmierung ein und erkunden verschiedene Techniken zur Identifizierung der drittkleinsten Zahl in verschiedenen Datenquellen.

Die drittkleinste Zahl in Java finden – Ein umfassender Leitfaden

Bei der Datenmanipulation und -analyse besteht häufig die Notwendigkeit, bestimmte Elemente innerhalb einer Zahlensammlung zu identifizieren. Das Ermitteln der kleinsten oder größten Zahl ist relativ einfach, die Bestimmung der drittkleinsten Zahl erfordert jedoch etwas mehr Fingerspitzengefühl. In diesem Blogbeitrag behandeln wir drei Methoden zur Lösung dieses Problems mit Java: Sortieren eines Arrays, Sortieren einer Liste und Verwenden von Streams.

Methode 1: Sortieren eines Arrays

Arrays gehören zu den grundlegenden Datenstrukturen in Java und sind daher ein natürlicher Ausgangspunkt für unsere Erkundung. Die Idee hier ist, das Array in aufsteigender Reihenfolge zu sortieren und dann das Element bei Index 2 abzurufen.

Methode 2: Sortieren einer Liste

Listen stellen eine flexiblere Alternative zu Arrays dar und ermöglichen eine dynamische Größenänderung und einfachere Manipulation. Um die drittkleinste Zahl in einer Liste zu finden, können wir einen ähnlichen Ansatz zur Array-Sortierung verfolgen.

Methode 3: Streams nutzen

Java-Streams sind eine leistungsstarke Möglichkeit, Elementsequenzen zu verarbeiten. Wir können Streams verwenden, um die Elemente zu sortieren und dann die drittkleinste Zahl abzurufen.

Die richtige Methode wählen

Jede Methode hat ihre eigenen Vorteile und Anwendungsfälle. Wenn Sie über ein Array verfügen, ist die Array-Sortiermethode möglicherweise die effizienteste. Listen sind vielseitig und bieten mehr Komfort, während Streams einen funktionalen Ansatz bieten und größere Datensätze problemlos verarbeiten können.

Hier ist ein vollständiges Beispiel:

CrunchyThirdSmallestNumberFinder.java

 Paket crunchify.com.tutorial;

java.util.Arrays importieren;
java.util.List importieren;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * @Autor Crunchify.com
 * Die drittkleinste Zahl in Java finden: Ein umfassender Leitfaden
 *
 */

öffentliche Klasse CrunchyThirdSmallestNumberFinder {

    // Methode zum Finden der drittkleinsten Zahl in einem Array
    public static int findCrunchyThirdSmallest(int[] crunchArr) {
        if (crunchArr.length < 3) {
            throw new IllegalArgumentException("Array sollte mindestens 3 Crunch-Elemente enthalten");
        }

        // Sortiere das Crunchy-Array in aufsteigender Reihenfolge
        Arrays.sort(crunchArr);
        return crunchArr[2]; // Das drittkleinste Crunchy-Element zurückgeben
    }

    // Methode, um die drittkleinste Zahl in einer Liste zu finden
    public static int findCrunchyThirdSmallest(List<Integer> crunchList) {
        if (crunchList.size() < 3) {
            throw new IllegalArgumentException("Liste sollte mindestens 3 Crunch-Elemente enthalten");
        }

        // Sortieren Sie die Crunchy-Liste mithilfe von Streams und sammeln Sie die sortierten Elemente in einer neuen Liste
        List<Integer> sortiertCrunchList = crunchList.stream()
                .sortiert()
                .collect(Collectors.toList());

        return sortedCrunchList.get(2); // Das drittkleinste Crunchy-Element zurückgeben
    }

    // Methode, um die knackige drittkleinste Zahl in einem Stream zu finden
    public static int findCrunchyThirdSmallest(Stream<Integer> crunchStream) {
        // Sammeln Sie die Elemente aus dem Crunchy-Stream, sortieren Sie sie und sammeln Sie sie in einer Liste
        List<Integer> sortedCrunchList = crunchStream.sorted().collect(Collectors.toList());

        if (sortedCrunchList.size() < 3) {
            throw new IllegalArgumentException("Stream sollte mindestens 3 Crunch-Elemente enthalten");
        }

        return sortedCrunchList.get(2); // Das drittkleinste Crunchy-Element zurückgeben
    }

    public static void main(String[] args) {
        int[] crunchArr = {35, 62, 28, 31, 13, 97};
        List<Integer> crunchList = Arrays.asList(9, 14, 676, 62, 11, 328);
        Stream<Integer> crunchStream = Stream.of(427, 53, 71, 99, 25, 62);

        // Finden Sie die knusprigen drittkleinsten Zahlen mithilfe verschiedener Quellen
        int crunchyThirdSmallestFromArr = findCrunchyThirdSmallest(crunchArr);
        int crunchyThirdSmallestFromList = findCrunchyThirdSmallest(crunchList);
        int crunchyThirdSmallestFromStream = findCrunchyThirdSmallest(crunchStream);

        // Drucke die knusprigen drittkleinsten Zahlen
        System.out.println("Crunchy drittkleinster aus arr: " + crunchyThirdSmallestFromArr);
        System.out.println("Crunchy drittkleinster aus der Liste: " + crunchyThirdSmallestFromList);
        System.out.println("Crunchy drittkleinster aus Stream: " + crunchyThirdSmallestFromStream);
    }
}

Ergebnis der Eclipse-Konsole:

Führen Sie einfach das obige Programm in Eclipse IDE oder IntelliJ IDEA aus und Sie erhalten das folgende Ergebnis.

 Knuspriger drittkleinster von arr: 31
Knusprig drittkleinster aus der Liste: 14
Knusprig drittkleinster aus Stream: 62

Prozess mit Exit-Code 0 beendet

Es sind einige Leistungsunterschiede zu berücksichtigen:

In Bezug auf die zeitliche Komplexität verfügen alle drei Methoden über ähnliche Sortierschritte, die im Allgemeinen eine zeitliche Komplexität von O(n log n) haben, wobei „n“ die Anzahl der Elemente in der Sammlung (Array, Liste oder Stream) ist.

Die zeitliche Komplexität des Zugriffs auf das drittkleinste Element ist konstant, O(1) , da es sich um eine einfache Array- oder Listensuche handelt.

  1. Array-Methode: Diese Methode sortiert das Array an Ort und Stelle, sodass für eine neue sortierte Sammlung kein zusätzlicher Speicher erforderlich ist. Dies kann im Vergleich zu den Listen- und Stream-Methoden zu einer etwas besseren Speichernutzung führen.
  2. Listenmethode: Diese Methode wandelt die Liste mithilfe von Streams in eine sortierte Liste um. Dies ist zwar praktisch, erfordert jedoch das Erstellen einer neuen Liste, was zusätzlichen Speicher verbraucht. Dies kann ein Problem sein, wenn die Speichernutzung von entscheidender Bedeutung ist.
  3. Stream-Methode: Die Stream-Methode ist recht flexibel und funktional, beinhaltet jedoch das Sammeln des Streams in einer Liste. Dies führt im Vergleich zur direkten Sortierung des Arrays zu einem geringen Mehraufwand an Speicher und Verarbeitung.

Lassen Sie mich wissen, wenn bei der Ausführung dieses Codes Probleme auftreten.