Executando verificação de segurança...
Em resposta a [Não disponível]
2

Só um detalhe: stream tem um custo adicional que provavelmente é a causa da diferença tão grande de desempenho. Afinal, existe toda uma complexidade por debaixo dos panos para que ela funcione.

Mas se a ideia é comparar somente os algoritmos, uma busca linear deveria ser feita assim:

for (int i = 0; i < lista.size(); i++)
    if (target == lista.get(i)) {
        // encontrado
        break;
    }

Aí a diferença cai bastante e os tempos ficam bem próximos, variando de acordo com o elemento sendo buscado - se o número está no começo, a busca binária é mais lenta, por exemplo. Mas claro que na média ela é mais rápida.

Por fim, vale lembrar que medir os tempos com System.currentTimeMillis(), apesar de simples, é muito propenso a erros - leia aqui para entender melhor. Para resultados mais confiáveis, use alguma ferramenta específica, como por exemplo o JMH. Ou, a partir do Java 12, o Microbenchmark Suite.


Outro detalhe, o filter não necessariamente itera por toda a coleção, pois as streams são implementadas com lazy evaluation - ou seja, somente nas operações terminais é que os elementos começam a ser processados.

Carregando publicação patrocinada...