[JAVA] Vergleich der Verarbeitungsgeschwindigkeit zwischen Stream einschließlich Cast und Extended for Statement

Einführung

Bei der Bearbeitung von ** Elementen eines bestimmten Typs **, die in einem Array oder einer Sammlung enthalten sind, haben wir die Verarbeitungsgeschwindigkeit überprüft, die schneller ist, Stream oder erweitert für Anweisungen.

Code zur Vorbereitung im Voraus

Ein Array von 100 Millionen Elementen


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 mit 100 Millionen Elementen


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("");

Dieses Mal werden wir mithilfe eines Arrays und einer ArrayList überprüfen. Es werden 50 Millionen Objekte vom Typ Objekt und 50 Millionen Elemente vom Typ String gespeichert.

Überprüfung

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");
Art Zeit
Array 345ms
ArrayList 409ms

Das Array scheint etwas schneller zu sein.

Für Aussage erweitert


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");
Art Zeit
Array 122ms
ArrayList 212ms

In diesem Vergleich haben wir festgestellt, dass die erweiterte for-Anweisung schneller ist als der Stream [^ 1]. Da ich normalerweise keinen Code schreibe, der Millionen oder zehn Millionen Elemente verarbeitet, verwende ich Streams oft ohne viel Bewusstsein, aber wenn ich mich auf die Leistung konzentriere, scheint es, dass Streams mit Vorsicht verwendet werden müssen.

[^ 1]: Wir entschuldigen uns für etwaige Unannehmlichkeiten bei der Messmethode, würden uns aber freuen, wenn Sie uns dies mitteilen könnten.

Recommended Posts

Vergleich der Verarbeitungsgeschwindigkeit zwischen Stream einschließlich Cast und Extended for Statement
Vergleichen Sie die Geschwindigkeit der for-Anweisung und der erweiterten for-Anweisung.
[Java] für Anweisung / erweitert für Anweisung
Informationen zur Implementierung der Zusammenführungsverarbeitung einschließlich der Sortierfunktion der Stream-API
[Java] Machen Sie die Variablen der erweiterten for-Anweisung und für jede Anweisung unveränderlich
Über für Anweisung und wenn Anweisung
Verwendung von Java-Array-Elementen für, Länge, Wert und erweitert für Anweisungen
Vergleich der Verarbeitungszeit basierend auf awk, Shell-Befehl und Java