• 个性签名
  • 格言大全
  • 名言大全
  • 笑话大全
  • 知识问答
  • 生活家居
  • 星座运势
  • 宝宝起名
  • 休闲爱好
  • 百科大全
  • java8 stream和foreach哪个效率高

    栏目: 房产 日期:2023-12-18 08:02:16 浏览量(来源:小成

    [摘要]java8 stream和foreach哪个效率高?Java 8引入了Stream API,提供了一种优雅和方便的方式来处理集合数据。 在Stream API中...

    java8 stream和foreach哪个效率高?

    Java 8引入了Stream API,提供了一种优雅和方便的方式来处理集合数据。 在Stream API中,foreach方法可以将操作作用于每个元素,而Stream中的forEach方法可以更好地处理大量的数据。

    虽然,从代码实现上来看,它们的语法非常相似,但是它们背后的实现方式略有不同。Stream API是通过并行处理数据来提高效率的,而foreach则是以序列化处理方式来执行操作。 因此,在处理大量数据时,Stream比foreach更高效,因为它利用了现代多核处理器的优势。

    当然,这并不意味着StreamAPI适用于所有场景。在一些小型数据集上,使用forEach可能会更加合适。同时也要注意,StreamAPI对于某些操作返回的是新的流,而非在原有流中进行修改,这也可能导致一些额外的开销。

    综上所述,Stream和foreach本质上是不同的操作方式,选择哪个取决于具体的场景和数据集大小。对于大型数据集,Stream更高效。如果数据集很小,而又需要修改集合中的元素,那么使用foreach可能会更好一些。

    java8 stream和foreach哪个效率高?

    1. 问题描述

    java8 stream和foreach哪个效率高?

    问题结论

    150W条数据以上:stream>paralleStream>simple

    150W条数据以下:simple>stream>paralleStream

    从性能上考虑:小数据量用普通的forEach就可以,没有必要使用java8中的新出来的几种,已经在项目中使用的也不需要改回来,10W条也就几毫秒的差距。

    2. 测试用例

    import java.util.ArrayList;

    import java.util.List;

    public class ForEachMain {

    public static void main(String[] args) {

    // 实例化arrayList

    List<Integer> arrayList = new ArrayList<Integer>();

    int num = 15000000;

    // 插入10万条数据

    for (int i = 0; i < num; i++) {

    arrayList.add(i);

    }

    List<Integer> res = new ArrayList<>();

    res.clear();

    // 用foreach循环arrayList

    long arrayForeachStartTime = System.currentTimeMillis();

    for (Integer in : arrayList) {

    res.add(in);

    }

    long arrayForeachEndTime = System.currentTimeMillis();

    System.out.println(

    "用foreach循环arrayList " + (num) + "次花费时间:" + (arrayForeachEndTime - arrayForeachStartTime) + "毫秒");

    res.clear();

    // 用stream-foreach循环arrayList

    long arrayStreamStartTime = System.currentTimeMillis();

    arrayList.stream().forEach(e -> res.add(e));

    long arrayStreamEndTime = System.currentTimeMillis();

    System.out.println(

    "用Stream-foreach循环arrayList " + (num) + "次花费时间:" + (arrayStreamEndTime - arrayStreamStartTime) + "毫秒");

    res.clear();

    // 用parallelStream-foreach循环arrayList

    long arrayParallelStreamStartTime = System.currentTimeMillis();

    arrayList.parallelStream().forEach(e -> res.add(e));

    long arrayParallelStreamEndTime = System.currentTimeMillis();

    System.out.println("用parallelStream-foreach循环arrayList " + (num) + "万次花费时间:"

    + (arrayParallelStreamEndTime - arrayParallelStreamStartTime) + "毫秒");

    }

    }

    2.1 当num = 50000000时

    用foreach循环arrayList 5000万次花费时间:2840毫秒

    用stream-foreach循环arrayList 5000万次花费时间:507毫秒

    用parallelStream-foreach循环arrayList 5000万次花费时间:1168毫秒

    2.2 当num = 500000时

    用foreach循环arrayList 50万次花费时间:13毫秒

    用stream-foreach循环arrayList 50万次花费时间:25毫秒

    用parallelStream-foreach循环arrayList 50万次花费时间:35毫秒

    2.3 当num = 5000时

    用foreach循环arrayList 5000次花费时间:1毫秒

    用stream-foreach循环arrayList 0万次花费时间:16毫秒

    用parallelStream-foreach循环arrayList 0万次花费时间:8毫秒

    最直观的感觉,stream的流式处理应该比较快,这种想当然的推测,需要事实去佐证,运行过测试代码之后,发现并不是那么回事。耳听为虚,眼见为实,李子是不是涩的,最简单的方式是尝一口。请记住,编写代码时,一定要以最简洁为原则,毕竟运行程序的硬件成本会随着时间的推移在不断降低。

    作者:夕阳雨晴,欢迎关注我的头条号:偶尔美文,主流Java,为你讲述不一样的码农生活。

    上一页12下一页