Почему фильтр Java Stream API быстрее, чем императивный цикл?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Почему фильтр Java Stream API быстрее, чем императивный цикл?

Сообщение Anonymous »

У меня важный вопрос.
Я провел тестирование с использованием следующих версий инструмента:

Код: Выделить всё

# JMH version: 1.37
# VM version: JDK 22, OpenJDK 64-Bit Server VM, 22+36-FR
# VM invoker: /home/jack/.sdkman/candidates/java/22-amzn/bin/java
Я заметил, что для наборов данных с 1000 и более элементами операции фильтрации Java Stream API выполняются быстрее, чем императивный подход с использованием цикла. Ожидается ли такое поведение?
Код теста:

Код: Выделить всё

package com.example;

import org.openjdk.jmh.annotations.*;
import org.openjdk.jmh.infra.Blackhole;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;

@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
@State(Scope.Thread)
@Fork(1)
@Warmup(iterations = 20, time = 1, timeUnit = TimeUnit.SECONDS)
@Measurement(iterations = 20, time = 1, timeUnit = TimeUnit.SECONDS)
public class Main {

@Param({"1", "10", "100", "1000", "100000", "1000000"})
private int size;

private List list;

@Setup(Level.Iteration)
public void setup() {
list = generateNumberedList(size);
}

@Benchmark
public void streamFilter(Blackhole blackhole) {
blackhole.consume(list.stream().filter(x -> x % 2 == 0).toList());
}

@Benchmark
public void imperativeFilter(Blackhole blackhole) {
List result = new ArrayList(size);
for (int i = 0; i < list.size(); i++) {
if (list.get(i) % 2 == 0) {
result.add(list.get(i));
}
}
blackhole.consume(result);
}

private List generateNumberedList(int size) {
List list = new ArrayList(size);
for (int i = 1; i 

Подробнее здесь: [url]https://stackoverflow.com/questions/79367830/why-java-stream-api-filter-is-faster-than-an-imperative-loop[/url]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Императивный клиент для сервера Autobahn WAMP?
    Anonymous » » в форуме Python
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Какова связь между структурой данных Stream (java.util.stream) и LinkedList в Java?
    Anonymous » » в форуме JAVA
    0 Ответы
    61 Просмотры
    Последнее сообщение Anonymous
  • Получение списка из java.util.stream.Stream в Java 8
    Anonymous » » в форуме JAVA
    0 Ответы
    30 Просмотры
    Последнее сообщение Anonymous
  • Получение списка из java.util.stream.stream в Java 8
    Anonymous » » в форуме JAVA
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Как работает метод java.util.stream.Stream.distinct()? Могу ли я переопределить методquals() для потоковых объектов?
    Anonymous » » в форуме JAVA
    0 Ответы
    37 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»