Quelle est la lenteur du scanner Java?

Il y avait un sujet ici que Java Scanner était très lent, donc j'ai mesuré sa lenteur, donc je vais le rapporter brièvement.

Comparaison de vitesse de Python, Java, C ++

résultat

nombre de données=Un million Temps d'exécution
Scanner Java 714 msec
Propre scanner 24 msec
grossissement 29.75

Comparé à notre propre scanner simple, Java Scanner prend environ 30 fois plus de temps. Il semble préférable de ne pas utiliser Sanner dans la programmation compétitive.

Voici le code utilisé pour la comparaison.

Une version qui utilise le scanner Java tel quel

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);
    }
}

Votre propre version de scanner de lecture de valeur int

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

Quelle est la lenteur du scanner Java?
Qu'est-ce qu'une collection Java?
Comment créer un conteneur Java
Java sur AWS Lambda est-il lent?
Le calendrier Java n'est pas un singleton.
Qu'est-ce qu'une expression lambda (Java)
Comment créer un tableau Java
Une histoire de malentendu sur l'utilisation du scanner Java (mémo)
Qu'est-ce qu'une classe en langage Java (3 /?)
Comment créer un résumé de calendrier Java
[Introduction à Java] Comment écrire un programme Java
Qu'est-ce qu'une classe en langage Java (1 /?)
Comment créer un robot Discord (Java)
Qu'est-ce qu'une classe en langage Java (2 /?)
Comment utiliser la classe Java Scanner (Remarque)
Qu'est-ce que 'java
classe Scanner java
Qu'est-ce que Java <>?
Qu'est-ce que 'java
Comment afficher une page Web en Java
Comment convertir un contrat de solidité en une classe de contrat Java
Combien d'opérateurs ternaires sont autorisés en Java
Comment mrbgem est "intégré"
Qu'est-ce qu'un constructeur
Comment passer d'Eclipse Java à un fichier SQL
java: Comment écrire une liste de types génériques [Note]
Qu'est-ce qu'un flux
java construire un triangle
Qu'est-ce que l'encapsulation Java?
Comment créer un URI de données (base64) en Java
[Java] Comment obtenir une requête par communication HTTP
[Java] Comment exécuter des tâches régulièrement
[Java] Comment découper une chaîne de caractères caractère par caractère
[Java] Comment effacer un caractère spécifique d'une chaîne de caractères
Comment convertir A en A et A en A en utilisant le produit logique et la somme en Java
Qu'est-ce que la technologie Java?
Qu'est-ce que Java API-java
Comment convertir un fichier en tableau d'octets en Java
[Java] Qu'est-ce que flatMap?
Qu'est-ce qu'un servlet?
Java11: exécuter le code Java dans un seul fichier tel quel
[Java] Qu'est-ce que ArrayList?
[Java] Comment rompre une ligne avec StringBuilder
entrée de boucle du scanner java
Docker x Java Construire un environnement de développement trop simple
Comment créer une image de conteneur légère pour les applications Java
Comment déployer une application Java Servlet simple sur Heroku
Comment stocker des chaînes de ArrayList à String en Java (personnel)
Qu'est-ce que c'est? Découvrez comment n'importe qui peut écrire un programme
Comment déployer une application kotlin (java) sur AWS Fargate
Fonctionnalité du langage Java et comment elle a produit un bogue subtil
Comment développer et enregistrer une application Sota en Java
Comment simuler le téléchargement de formulaires post-objet vers OSS en Java
[Java] Une classe est un système d'exploitation et une instance est un ordinateur virtuel.
[Java] Code difficile à remarquer mais terriblement lent
Qu'est-ce que l'assertion Java? Résumé.