广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java for循环和foreach循环的性能对比分析
  • 304
分享到

Java for循环和foreach循环的性能对比分析

2024-04-02 19:04:59 304人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录for循环和foreach循环的性能对比普通for循环语法foreach 循环语法for与foreach循环效率比较对于数组来说对于链表来说小结一下吧for循环和foreach循

for循环和foreach循环的性能对比

在公司codereview过程中,发现一个问题,就是有些人循环用的是普通for循环,有些人用的是foreach循环,它们之间有什么区别?应该在什么时候使用这两种循环了?

两种循环的语法格式:

普通for循环语法


for (int i = 0; i < integers.length; i++) {
    System.out.println(intergers[i]);
}

foreach 循环语法


for(Integer in : integers){
    System.out.println(in);
}

今天我们来比较一下两种for循环对ArrayList和LinkList集合的循环性能比较。首先简单的了解一下ArrayList和LinkList的区别:

  • ArrayList:ArrayList是采用数组的形式保存对象的,这种方式将对象放在连续的内存块中,所以插入和删除时比较麻烦,查询比较方便。
  • LinkList:LinkList是将对象放在独立的空间中,而且每个空间中还保存下一个空间的索引,也就是数据结构中的链表结构,插入和删除比较方便,但是查找很麻烦,要从第一个开始遍历。

下面是我测试的代码:


public class Main { 
 public static void main(String[] args){
  //实例化arrayList
  List<Integer> arrayList = new ArrayList<Integer>();
  //实例化linkList
  List<Integer> linkList = new LinkedList<Integer>();
 
  //插入10万条数据
  for (int i = 0; i < 100000; i++) {
   arrayList.add(i);
   linkList.add(i);
  }
  
  int array = 0;
  //用for循环arrayList
  long arrayForStartTime = System.currentTimeMillis();
  for (int i = 0; i < arrayList.size(); i++) {
   array = arrayList.get(i);
  }
  long arrayForEndTime = System.currentTimeMillis();
  System.out.println("用for循环arrayList 10万次花费时间:" + (arrayForEndTime - arrayForStartTime) + "毫秒");
  
  //用foreach循环arrayList
  long arrayForeachStartTime = System.currentTimeMillis();
  for(Integer in : arrayList){
   array = in;
  }
  long arrayForeachEndTime = System.currentTimeMillis();
  System.out.println("用foreach循环arrayList 10万次花费时间:" + (arrayForeachEndTime - arrayForeachStartTime ) + "毫秒");
  
  //用for循环linkList
  long linkForStartTime = System.currentTimeMillis();
  int link = 0;
  for (int i = 0; i < linkList.size(); i++) {
   link = linkList.get(i);
  }
  long linkForEndTime = System.currentTimeMillis();
  System.out.println("用for循环linkList 10万次花费时间:" + (linkForEndTime - linkForStartTime) + "毫秒");
  
  //用froeach循环linkList
  long linkForeachStartTime = System.currentTimeMillis();
  for(Integer in : linkList){
   link = in;
  }
  long linkForeachEndTime = System.currentTimeMillis();
  System.out.println("用foreach循环linkList 10万次花费时间:" + (linkForeachEndTime - linkForeachStartTime ) + "毫秒");
 }
}

循环10万次的时候,控制台打印结果:

用for循环arrayList 10万次花费时间:5毫秒

用foreach循环arrayList 10万次花费时间:7毫秒

用for循环linkList 10万次花费时间:4481毫秒

用foreach循环linkList 10万次花费时间:5毫秒

可以看出,循环ArrayList时,普通for循环比foreach循环花费的时间要少一点;循环LinkList时,普通for循环比foreach循环花费的时间要多很多。

当我将循环次数提升到一百万次的时候,循环ArrayList,普通for循环还是比foreach要快一点;但是普通for循环在循环LinkList时,程序直接卡死。

结论:需要循环数组结构的数据时,建议使用普通for循环,因为for循环采用下标访问,对于数组结构的数据来说,采用下标访问比较好。

需要循环链表结构的数据时,一定不要使用普通for循环,这种做法很糟糕,数据量大的时候有可能会导致系统崩溃。

for与foreach循环效率比较

对于数组来说

for循环略慢foreach

对于链表来说

for循环比foreach慢很多。因为for循环每次获取链表节点都要重头开始查找,而foreach是采用迭代方式,查找节点只需遍历一次,节省了很多时间。

小结一下吧

在循环操作中不涉及插入、删除等行为时,优先使用foreach

在循环操作中涉及插入、删除等破坏数组或链表原始映像行为时,应使用for

坊间传闻,foreach的效率要比for的效率快8倍左右

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: Java for循环和foreach循环的性能对比分析

本文链接: https://www.lsjlt.com/news/136831.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java for循环和foreach循环的性能对比分析
    目录for循环和foreach循环的性能对比普通for循环语法foreach 循环语法for与foreach循环效率比较对于数组来说对于链表来说小结一下吧for循环和foreach循...
    99+
    2022-11-12
  • Parallel.For循环与普通for循环的性能比较
    一、Parallel.For循环优于For的情况 代码: #region Parallel.For public static void Parall...
    99+
    2022-11-13
  • Java和Python中for循环的比较
    Java是强类型的语言,而python是弱类型的语言。先看Java中的for循环使用,如下图: package test06; public class Fortest { public static void main(Str...
    99+
    2023-01-31
    Java Python
  • python向量化与for循环耗时对比分析
    目录向量化与for循环耗时对比向量化数据的相比于for循环的优势向量化与for循环耗时对比 深度学习中,可采用向量化替代for循环,优化耗时问题 对比例程如下,参考Andrew NG...
    99+
    2022-11-11
  • vue中v-for循环对象的示例分析
    这篇文章将为大家详细讲解有关vue中v-for循环对象的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、循环对象内的值<body>    &l...
    99+
    2023-06-25
  • Java深入分析Iterator迭代器与foreach循环的使用
    目录一、Iterator迭代器接口1. 使用Iterator接口遍历集合元素2. Iterator接口的方法3. 迭代器的执行原理3.1 代码演示3.2 代码执行过程解析4. Ite...
    99+
    2022-11-13
  • 微信小程序中页面FOR循环和嵌套循环的示例分析
    小编给大家分享一下微信小程序中页面FOR循环和嵌套循环的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!微信小程序中页面F...
    99+
    2022-10-19
  • JS数组循环的方式以及效率分析对比
    数组的方法 JavaScript发展到现在已经提供了许多数组的方法,下面这张图涵盖了数组大部分的方法,这篇文章主要说一说数组的遍历方法,以及各自的性能,方法这么多,如何挑选性能最佳的...
    99+
    2022-11-12
  • C++新特性详细分析基于范围的for循环
    目录1、概念1.1、普通的for循环1.2、基于范围的for循环1.3、两者的区别2、基于范围的for循环使用2.1、值拷贝2.2、引用2.3、只读引用2.4、关联容器1、概念 //...
    99+
    2022-11-13
  • JS跳出循环的方法区别对比分析(break,continue,return)
    目录js编程语法之break语句:js编程语法之continue语句:js编程语法之return语句:跟许多多态语言一样,js也有break,continue,return 面向对象...
    99+
    2023-02-28
    js跳出循环 js break continue return区别
  • js+ajax处理java后台返回的json对象循环创建到表格的示例分析
    小编给大家分享一下js+ajax处理java后台返回的json对象循环创建到表格的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!具体如下://注:LO是表格的id; 需要...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作