Wie langsam ist Javas Scanner?

Es gab hier ein Thema, bei dem Java Scanner sehr langsam war, daher habe ich gemessen, wie langsam es war, daher werde ich es kurz melden.

Vergleich der Geschwindigkeit von Python, Java, C ++

Ergebnis

Anzahl der Daten=Eine Million Ausführungszeit
Java Scanner 714 msec
Eigener Scanner 24 msec
Vergrößerung 29.75

Im Vergleich zu unserem eigenen einfachen Scanner dauert der Java-Scanner etwa 30-mal länger. Es scheint besser, Sanner nicht in der Wettbewerbsprogrammierung zu verwenden.

Unten finden Sie den zum Vergleich verwendeten Code.

Eine Version, die den Java-Scanner unverändert verwendet

import java.util.*;
import java.io.*;
import java.util.stream.*;

public class ScannerTest {
    public static void main(String[] args) {
        long t0 = System.currentTimeMillis();
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] d = new int[n];
        for (int i = 0; i < n; i++) {
            d[i] = sc.nextInt();
        }
        long t1 = System.currentTimeMillis();
        System.out.println("n = " + n );
        System.out.println((t1-t0) + " msec");
        int sum = IntStream.of(d).sum();
        System.out.println("sum = " + sum);
    }
}

Ihr eigener int-Wert, der die Scannerversion liest

import java.util.*;
import java.io.*;
import java.util.stream.*;

public class ScannerTest3 {
    static class MyScanner {
        byte[] bytes;
        int pos = 0;
        int len;
        InputStream inputStream;
        MyScanner(InputStream is){
            try{
                inputStream = is;
                bytes = new byte[1024];
                len = Math.max(0,inputStream.read(bytes));
                pos = 0;
                return;
            }catch(Exception e){
                e.printStackTrace();
            }
        }
        private byte getNextByte() throws IOException {//throws ArrayIndexOutOfBoundsException
            if( pos >= len ){
                len = Math.max(0,inputStream.read(bytes));
                pos = 0;
            }
            byte result = bytes[pos++];
            return result;
        }
        int nextInt() throws IOException {
            int result = 0;
            byte v;
            while(true){
                v = getNextByte();
                if( v != ' ' && v != '\n' && v != '\r'){
                    break;
                }
            }
            while(true){
                if( v == ' ' || v == '\n' || v == '\r' ){
                    break;
                }
                result *= 10;
                result += (int)v - (int)'0';
                v = getNextByte();
            }
            return result;
        }
    }
    public static void main(String[] args) throws Exception{
        long t0 = System.currentTimeMillis();
        MyScanner sc = new MyScanner(System.in);
        int n = sc.nextInt();
        int[] d = new int[n];
        for (int i = 0; i < n; i++) {
            d[i] = sc.nextInt();
        }
        long t1 = System.currentTimeMillis();
        System.out.println("n = " + n );
        System.out.println((t1-t0) + " msec");
        int sum = IntStream.of(d).sum();
        System.out.println("sum = " + sum);
    }
}

Recommended Posts

Wie langsam ist Javas Scanner?
Was ist eine Java-Sammlung?
So erstellen Sie einen Java-Container
Ist Java unter AWS Lambda langsam?
Java Calendar ist kein Singleton.
Was ist ein Lambda-Ausdruck (Java)
So erstellen Sie ein Java-Array
Eine Geschichte über Missverständnisse im Umgang mit Java-Scannern (Memo)
Was ist eine Klasse in der Java-Sprache (3 /?)
So erstellen Sie eine Java-Kalenderzusammenfassung
[Einführung in Java] So schreiben Sie ein Java-Programm
Was ist eine Klasse in der Java-Sprache (1 /?)
Wie erstelle ich einen Discord Bot (Java)
Was ist eine Klasse in der Java-Sprache (2 /?)
Verwendung der Java Scanner-Klasse (Hinweis)
Was ist java
Java-Scanner-Klasse
Was ist Java <>?
Was ist java
So zeigen Sie eine Webseite in Java an
So konvertieren Sie einen Soliditätsvertrag in eine Java-Vertragsklasse
Wie viele ternäre Operatoren sind in Java zulässig?
Wie mrbgem "eingebettet" ist
Was ist ein Konstruktor?
So springen Sie von Eclipse Java zu einer SQL-Datei
java: Wie schreibe ich eine generische Typliste? [Hinweis]
Was ist ein Stream?
Java baut ein Dreieck
Was ist Java-Kapselung?
So erstellen Sie einen Daten-URI (base64) in Java
[Java] So erhalten Sie eine Anfrage per HTTP-Kommunikation
[Java] Wie man Aufgaben regelmäßig ausführt
[Java] So schneiden Sie eine Zeichenfolge zeichenweise aus
[Java] So löschen Sie ein bestimmtes Zeichen aus einer Zeichenfolge
So konvertieren Sie A in a und a in A mit logischem Produkt und Summe in Java
Was ist Java-Technologie?
Was ist Java API-Java?
So konvertieren Sie eine Datei in ein Byte-Array in Java
[Java] Was ist flatMap?
Was ist ein Servlet?
Java11: Führen Sie Java-Code unverändert in einer einzelnen Datei aus
[Java] Was ist ArrayList?
[Java] So unterbrechen Sie eine Zeile mit StringBuilder
Java Scanner Loop Eingang
Docker x Java Erstellen einer zu einfachen Entwicklungsumgebung
So erstellen Sie ein leichtes Container-Image für Java-Apps
So stellen Sie eine einfache Java-Servlet-App auf Heroku bereit
Speichern von Zeichenfolgen von ArrayList zu Zeichenfolge in Java (Personal)
Was ist das? Entdecken Sie, wie jeder ein Programm schreiben kann
So stellen Sie eine Kotlin (Java) -App auf AWS fargate bereit
Java-Sprachfunktion und wie sie einen subtilen Fehler verursachte
So entwickeln und registrieren Sie eine Sota-App in Java
So simulieren Sie das Hochladen von Post-Object-Formularen in OSS in Java
[Java] Eine Klasse ist ein Betriebssystem und eine Instanz ist ein virtueller Computer.
[Java] Code, der schwer zu bemerken, aber furchtbar langsam ist
Was ist Java Assertion? Zusammenfassung.