[JAVA] Die Frage, welche besser ist, ob oder wechseln

Einführung

――Wie oft haben Sie geschrieben, seit Sie codiert haben? Lol ――Selbst wenn Sie Zehntausende Male schreiben, fragen Sie sich manchmal, ob Sie switch verwenden sollen oder ob, oder? ?? (Ich kann besorgt sein)

Meine aktuellen Auswahlkriterien

-Bei der Auswahl einer if-Anweisung:&&Und||Wann du willst

Welches wird besser abschneiden, wenn Sie eines von beiden spielen?

――Wenn Sie interessiert sind, sollten Sie es messen, richtig? Ich denke

Was du vorbereitet hast

Inhaltsverzeichnis (was zum Zeitpunkt des Schreibens der Tabelle zu tun ist)

Trainieren

Führen Sie den Zweig in einer Schleife von ungefähr 100 Mal aus

CheckPerformance.java


import java.util.stream.IntStream;

public class CheckPerformance {

    public static void main(String[] args) {
        Long start = System.currentTimeMillis();
        //wenn Ausführung
        IntStream.rangeClosed(0, 100).forEach(i -> {
            if (i % 2 == 0) {
                System.out.println("Ist gerade");
            } else if (i % 2 == 1) {
                System.out.println("Ist ungerade");
            } else {
                System.out.println("Andere");
            }
        });

        //Switch-Ausführung
        IntStream.rangeClosed(0, 100).forEach(i -> {
            switch (i % 2) {
                case 0:
                    System.out.println("Ist gerade");
                    break;
                case 1:
                    System.out.println("Ist ungerade");
                    break;
                default:
                    System.out.println("Andere");
                    break;
            }
        });
        Long end = System.currentTimeMillis();
        System.out.println(end - start + "ms");
    }
}
X. Mal Anzahl der Sekunden, die ausgeführt werden sollen, wenn Anzahl der Sekunden, um die Umschaltung auszuführen
1. Mal 7ms 12ms
Zweites Mal 15ms 10ms
Drittes Mal 13ms 12ms
4 .. 8ms 15ms
5. Mal 10ms 10ms

Überprüfung

――Ich habe es mehrmals ausgeführt, aber es wurde wie ein Glücksspiel, und ich entschied, dass es schwierig sein würde, den Leistungsunterschied mit 100 Mal zu überprüfen.

Führen Sie einen Zweig in einer Schleife von 1.000 Mal aus

X. Mal Anzahl der Sekunden, die ausgeführt werden sollen, wenn Anzahl der Sekunden, um die Umschaltung auszuführen
1. Mal 36ms 39ms
Zweites Mal 33ms 35ms
Drittes Mal 31ms 28ms
4 .. 38ms 39ms
5. Mal 38ms 34ms

Überprüfung

――Hmm, es ist subtil, den Leistungsunterschied sogar 1000-mal zu überprüfen ――Ich habe immer noch das Gefühl, dass es hier in der Kategorie der Fehler liegt.

Führen Sie den Zweig in 10.000 Schleifen aus

--Quelle ist (ry

X. Mal Anzahl der Sekunden, die ausgeführt werden sollen, wenn Anzahl der Sekunden, um die Umschaltung auszuführen
1. Mal 133ms 119ms
Zweites Mal 147ms 136ms
Drittes Mal 116ms 121ms
4 .. 135ms 130ms
5. Mal 128ms 136ms

Überprüfung

――Hmm, sogar 10.000 Mal ... (ry

Führen Sie den Zweig in 100.000 Schleifen aus

--Quelle ist (ry

X. Mal Anzahl der Sekunden, die ausgeführt werden sollen, wenn Anzahl der Sekunden, um die Umschaltung auszuführen
1. Mal 903ms 917ms
Zweites Mal 947ms 885ms
Drittes Mal 1012ms 964ms
4 .. 1109ms 947ms
5. Mal 943ms 884ms

Überprüfung

――Ich habe das Gefühl, dass es nach 100.000 Mal einen leichten Leistungsunterschied gab. ――Der Schalter hat 1 Sekunde 0 Mal überschritten, aber es gibt 2 Wenns. ――Jedoch kann der Fehler ein Fehler sein, und wenn Sie nur den Durchschnittswert betrachten, kann der Wechsel schneller sein? Die Hypothese kam »Aber ich mache mir ein bisschen Sorgen, also füge ich eine weitere Ziffer hinzu und führe sie aus.

Führen Sie einen Zweig in einer Schleife von 1.000.000 Mal aus

X. Mal Anzahl der Sekunden, die ausgeführt werden sollen, wenn Anzahl der Sekunden, um die Umschaltung auszuführen
1. Mal 6366ms 6339ms
Zweites Mal 6410ms 6396ms
Drittes Mal 6794ms 6298ms
4 .. 6730ms 6248ms
5. Mal 6823ms 6495ms

Überprüfung

Erhöhen Sie die Anzahl der Zweige

――So bin ich bis zu einem gewissen Grad zufrieden, daher werde ich die Anzahl der Filialen erhöhen. ――Von hier habe ich festgestellt, dass es nicht viel Sinn macht, 100 Fälle zu machen, also werde ich mit 1 Million Fällen arbeiten.

Machen Sie zuerst drei Zweige

X. Mal Anzahl der Sekunden, die ausgeführt werden sollen, wenn Anzahl der Sekunden, um die Umschaltung auszuführen
1. Mal 6348ms 6476ms
Zweites Mal 6751ms 6354ms
Drittes Mal 6461ms 6324ms
4 .. 6500ms 6411ms
5. Mal 6537ms 6646ms

Überprüfung

――Sie können den Leistungsunterschied nach 3 Zweigen erkennen. ――Wenn Sie sich den Durchschnittswert ansehen, ist der Wechsel etwas schneller, nicht wahr? ――Jedoch kann es ein Fehler sein, also erhöhen Sie die Anzahl der Zweige.

Bilden Sie 5 Zweige

――Ich habe mich wegen der einfachen Berechnung und meiner Stimmung für fünf entschieden.

X. Mal Anzahl der Sekunden, die ausgeführt werden sollen, wenn Anzahl der Sekunden, um die Umschaltung auszuführen
1. Mal 6528ms 6279ms
Zweites Mal 6452ms 6507ms
Drittes Mal 6661ms 6599ms
4 .. 6501ms 6589ms
5. Mal 6608ms 6322ms

Überprüfung

Fazit

Es gibt fast keinen Unterschied in der Leistung zwischen if und switch!

»Es geht darum, den Titel zu holen, aber es ist meine Schlussfolgerung ――Ich habe nur 1 Million Fälle ausgeführt, aber mir ist bewusst, dass sich dies ändern kann, wenn weitere hinzugefügt werden. ―― Es scheint jedoch, dass sich die Leistung zwischen if und switch je nach Anzahl der Zweige und Anzahl der Prozesse nicht wesentlich ändert. Daher halte ich es für richtig, eine Implementierung zu wählen, die je nach Zeit leichter zu lesen ist. ――Wenn etwas nicht stimmt oder wenn Sie es eher so überprüfen sollten, hinterlassen Sie bitte einen Kommentar oder eine Bearbeitungsanfrage!

Nachtrag

Main.java


import java.util.HashMap;
import java.util.Map;
import java.util.stream.IntStream;

public class Main {

    public static void main(String[] args) {

        long start = System.currentTimeMillis();

        IntStream.rangeClosed(0, 10000000).forEach(
                num -> {
                    if (num % 2 == 0) {
                        int num2 = 2;
                    } else if (num % 2 == 1){
                        int num3 = 2;
                    } else {
                        int num4 = 2;
                    }
                }
        );
        IntStream.rangeClosed(0, 10000000).forEach(
                num -> {
                    switch (num % 2) {
                        case 0:
                            int num2 = 2;
                            break;
                        case 1:
                            int num3 = 2;
                            break;
                        default:
                            int num4 = 2;
                            break;
                    }
                }
                        );
        long end = System.currentTimeMillis();
        System.out.println((end - start)  + "ms");

    }
}

Ausführungsergebnis

X. Mal Anzahl der Sekunden, die ausgeführt werden sollen, wenn Anzahl der Sekunden, um die Umschaltung auszuführen
1. Mal 79ms 70ms
Zweites Mal 81ms 64ms
Drittes Mal 90ms 62ms
4 .. 86ms 67ms
5. Mal 83ms 63ms

―― Nach dem Drehen von 10 Millionen Fällen gab es einen Leistungsunterschied von etwa 20 ms, aber ich frage mich, ob es kein Problem mit der Schlussfolgerung gibt, dass es fast keinen Unterschied gibt.

Recommended Posts

Die Frage, welche besser ist, ob oder wechseln
Was ist besser, Kotlin oder zukünftiges Java?
Java: Das Problem ist schneller, Stream oder Loop
Was ist schneller, Größe oder 0, als Argument von List # toArray?
[6 Auswahlmöglichkeiten für den Vergleich von Formularwerkzeugen] Was ist besser, Open Source oder kommerziell?
Gilt die Methode der primitiven spezialisierten IntFunction oder applyAsInt?
Was ist besser, Verallgemeinerung oder Delegation, wenn es Überschneidungen gibt?
Welcher ist der beste HTTP-Client für Java?
'% 02d' Was ist der% von% 2?
Was ist @Override oder @SuppressWarnings ("SleepWhileInLoop") vor der Funktion? ?? ??
Ändern Sie das Gespräch je nachdem, welcher Tag heute ist
Rufen Sie den Typ eines Elements eines Arrays ab, um festzustellen, ob es sich um ein Array handelt
[Java] Überprüfen Sie, ob die Zeichenfolge nur aus Leerzeichen besteht (= Leerzeichen)
Was ist ein Test? ・ Über die Wichtigkeit eines Tests
Wie ist die Datenstruktur von ActionText?
[Swift] Wenn die Anwendung iOS 11 oder höher unterstützt, war es nicht erforderlich, Int und Int64 ordnungsgemäß zu verwenden
Was ist JSP? ~ Lassen Sie uns die Grundlagen von JSP kennen !! ~
Der ActiveSupport-Unterstrich ist nicht die inverse Konvertierung von camelize
Die Reihenfolge der Java-Methodenmodifikatoren ist festgelegt
Welches ist schneller, Methodenreferenz oder Lambda-Ausdruck
Der offizielle Name von Spring MVC ist Spring Web MVC
Was ist schneller, Array # Sample oder Random # Rand?
[August 2020] Wenn die Installation von cool.io / puma fehlschlägt
Erster Touch der Files-Klasse (oder Java 8)
Das Ende der katastrophalen Programmierung # 03 "Der Vergleich von ganzen Zahlen, wenn" a> b ", nimmt an, dass es" a - b> 0 "ist."