[JAVA] Comparaison de la vitesse de traitement entre Stream incluant le cast et Extended for Statement

introduction

En opérant sur des ** éléments d'un type spécifique ** contenus dans un tableau ou une collection, nous avons vérifié la vitesse de traitement, qui est plus rapide, Stream ou étendue pour instruction.

Code à préparer à l'avance

Un tableau de 100 millions d'éléments


Object[] objects = new Object[100_000_000];
for (int i = 0; i < 50_000_000; i++)
    objects[i] = new Object();
for (int i = 50_000_000; i < 100_000_000; i++)
    objects[i] = "";

ArrayList avec 100 millions d'éléments


List<Object> objects = new ArrayList<>();
for (int i = 0; i < 50_000_000; i++)
    objects.add(new Object());
for (int i = 0; i < 50_000_000; i++)
    objects.add("");

Cette fois, nous allons vérifier en utilisant un tableau et ArrayList. Il stocke respectivement 50 millions d'éléments de type Object et de type String.

Vérification

Stream


long start = System.currentTimeMillis();
objects.stream() // Arrays.stream(objects)
    .filter(String.class::isInstance)
    .map(String.class::cast)
    .forEach(String::toUpperCase);
long finish = System.currentTimeMillis();
System.out.println(finish - start + "ms");
type temps
Tableau 345ms
ArrayList 409ms

Le tableau semble être un peu plus rapide.

Étendu pour déclaration


long start = System.currentTimeMillis();
for (Object obj : objects) {
    if (obj instanceof String) {
        ((String) obj).toUpperCase();
    }
}
long finish = System.currentTimeMillis();
System.out.println(finish - start + "ms");
type temps
Tableau 122ms
ArrayList 212ms

Dans cette comparaison, nous avons constaté que l'instruction for étendue est plus rapide que le Stream [^ 1]. Comme je n'écris généralement pas de code qui gère des millions ou dix millions d'éléments, j'utilise souvent des flux sans grande conscience, mais il semble que les flux doivent être utilisés avec prudence lorsque l'on se concentre sur les performances.

[^ 1]: Nous vous prions de nous excuser pour tout inconvénient lié à la méthode de mesure, mais nous vous serions reconnaissants de bien vouloir nous le faire savoir.

Recommended Posts

Comparaison de la vitesse de traitement entre Stream incluant le cast et Extended for Statement
Comparez la vitesse de l'instruction for et de l'instruction for étendue.
[Java] pour instruction / étendu pour instruction
À propos de l'implémentation du traitement de fusion, y compris la fonction de tri de l'API Stream
[Java] Rendre les variables de l'instruction for étendue et de chaque instruction immuables
À propos de l'instruction et de l'instruction if
Utilisation des éléments de tableau Java, for, length, value et extended for statements
Comparaison du temps de traitement basé sur awk, la commande shell et Java