java基础复习四:for与foreach的循环性能比较
来源:互联网 发布:java dom4j解析xml 编辑:程序博客网 时间:2024/06/05 10:39
基本上每次面试都会被问到这个问题,我的回答基本都是foreach性能比for循环好,可是真的是这样么?
常用的遍历类一般是ArrayList、LinkedList、数组,现在实际测试一下。
ArrayList
分别测试一千、一万、十万、百万条数据
测试代码:
public static void main (String[] args) { List<String> list = new ArrayList<>(); int k = 0; while (k <= 1000000) { list.add(String.valueOf(k)); k++; } int first = 0; int second = 0; for(int m=0; m < 100; m++) { long start = System.currentTimeMillis(); int size = list.size(); for (int i = 0; i < size; i++) { System.out.println(list.get(i)); } first += System.currentTimeMillis() - start; long startTwo = System.currentTimeMillis(); for (String i : list) { System.out.println(i); } second += System.currentTimeMillis() - startTwo; } BigDecimal divior = new BigDecimal(100); System.out.println("for总耗时" + first + "毫秒"); System.out.println("for平均耗时" + new BigDecimal(first).divide(divior,2, BigDecimal.ROUND_HALF_UP) + "毫秒"); System.out.println("foreach总耗时" + second + "毫秒"); System.out.println("foreach平均总耗时" + new BigDecimal(second).divide(divior,2, BigDecimal.ROUND_HALF_UP) + "毫秒"); }
测试结果:
从上面表格可以看出,再遍历ArrayList的时候,for循环与foreach循环性能几乎没有差别(有一点差别,应该是循环体代码造成的)。
所以,可以认为遍历ArrayList两种遍历方式性能是一样的,foreach循环性能并不优于for循环。
数组
测试代码:
public static void main (String[] args) { String[] list = new String[1000]; int k = 0; while (k < 1000) { list[k] = String.valueOf(k); k++; } int first = 0; int second = 0; for(int m=0; m < 100; m++) { long start = System.currentTimeMillis(); int size = list.length; for (int i = 0; i < size; i++) { System.out.println(list[i]); } first += System.currentTimeMillis() - start; long startTwo = System.currentTimeMillis(); for (String i : list) { System.out.println(i); } second += System.currentTimeMillis() - startTwo; } BigDecimal divior = new BigDecimal(100); System.out.println("for总耗时" + first + "毫秒"); System.out.println("for平均耗时" + new BigDecimal(first).divide(divior,2, BigDecimal.ROUND_HALF_UP) + "毫秒"); System.out.println("foreach总耗时" + second + "毫秒"); System.out.println("foreach平均总耗时" + new BigDecimal(second).divide(divior,2, BigDecimal.ROUND_HALF_UP) + "毫秒"); }
测试结果:
和ArrayList一样,for循环与foreach循环性能几乎没有差别。
所以遍历数组,两种遍历方式都可以。
LinkedList
测试代码:
public static void main (String[] args) { List<String> list = new LinkedList<>(); int k = 0; while (k < 1000) { list.add(String.valueOf(k)); k++; } int first = 0; int second = 0; for(int m=0; m < 50; m++) { long start = System.currentTimeMillis(); int size = list.size(); for (int i = 0; i < size; i++) { System.out.println(list.get(i)); } first += System.currentTimeMillis() - start; long startTwo = System.currentTimeMillis(); for (String i : list) { System.out.println(i); } second += System.currentTimeMillis() - startTwo; } BigDecimal divior = new BigDecimal(100); System.out.println("for总耗时" + first + "毫秒"); System.out.println("for平均耗时" + new BigDecimal(first).divide(divior,2, BigDecimal.ROUND_HALF_UP) + "毫秒"); System.out.println("foreach总耗时" + second + "毫秒"); System.out.println("foreach平均总耗时" + new BigDecimal(second).divide(divior,2, BigDecimal.ROUND_HALF_UP) + "毫秒"); }
测试结果:
数据对比非常明显,当数据量越来越大的时候,for循环已经不适用于linkedList的遍历了,而foreach还能保持很好的性能。
此时,可以说foreach性能比for好。
总结
1、foreach在遍历LinkedList的时候,性能是明显优于for;
2、在遍历数组和ArrayList的时候,两者没有明显区别;
阅读全文
0 0
- java基础复习四:for与foreach的循环性能比较
- Java基础-foreach循环与for循环比较
- Java for循环和foreach循环的性能比较
- Java for循环和foreach循环的性能比较
- for循环与foreach性能比较
- foreach与for的性能比较
- java for/foreach/while 3种循环性能比较
- Foreach循环及For性能及使用上的比较
- java-基础-foreach与正常for循环效率对比
- 关于C#中for与foreach的性能比较测试
- Java的for循环新用法 -- foreach与数组
- for循环与foreach循环 10万次性能测试[php] 带花括号与不带花括号四种情况
- java foreach与for速度比较
- JavaScript中forEach、for-in、for-of循环的比较
- 循环for与foreach的对比
- for和foreach性能比较
- for和foreach性能比较
- for、while、foreach性能比较
- 7-8 打印九九口诀表(15 分)
- VIPKID联合创始人陈媛:共享+AI,才能真正变革未来教育
- S05语句
- 葡萄城年末福利多,培训好礼送不停
- 麦肯锡:制定人工智能战略,CEO请先回答这九个问题
- java基础复习四:for与foreach的循环性能比较
- Netty-1、网络编程基本概念
- ARIA 使用 Hokuyo URG 04-LX
- Polling + Inotify 组合下的日志保序采集方案
- Maven生成可以直接运行的jar包的多种方式
- springcloud eureka服务注册与发现
- 【JAVA】java中实现map集合的数据存取详解三种方法。Android程序员也是要会写的
- 用自己的话总结arrayList与LinkedList
- 【云星数据---Apache Flink实战系列(精品版)】:Apache Flink批处理API详解与编程实战016--DateSet实用API详解016