jdk 6 package com.howtodoinjava.demo.core; import java.util.ArrayList; import java.util.Calendar; import java.util.List; public class ForLoopPerformanceTest { private static List<Integer> list = new ArrayList<Integer>(); private static long startTime; private static long endTime; // static // { // for(int i=0; i < 10000000; i++) // { // list.add(i); // } // } public static void main(String[] args) { for(int n=0; n < 1000000; n++) { list.add(n); } //Type 1 startTime = Calendar.getInstance().getTimeInMillis(); for(Integer i : list) { // } endTime = Calendar.getInstance().getTimeInMillis(); System.out.println("For each loop :: " + (endTime - startTime) + " ms"); //Type 2 startTime = Calendar.getInstance().getTimeInMillis(); for(int j = 0; j < list.size() ; j++) { // } endTime = Calendar.getInstance().getTimeInMillis(); System.out.println("Using collection.size() :: " + (endTime - startTime) + " ms"); //Type 3 startTime = Calendar.getInstance().getTimeInMillis(); int size = list.size(); for(int j = 0; j < size ; j++) { //System.out.println(j); } endTime = Calendar.getInstance().getTimeInMillis(); System.out.println("Using [int size = list.size(); int j = 0; j < size ; j++] :: " + (endTime - startTime) + " ms"); //Type 4 startTime = Calendar.getInstance().getTimeInMillis(); for(int j = list.size(); j > 0 ; j--) { //System.out.println(j); } endTime = Calendar.getInstance().getTimeInMillis(); System.out.println("Using [int j = list.size(); j > size ; j--] :: " + (endTime - startTime) + " ms"); } }
结果:
For each loop :: 64 ms Using collection.size() :: 16 ms Using [int size = list.size(); int j = 0; j < size ; j++] :: 1 ms Using [int j = list.size(); j > size ; j--] :: 1 ms
结论:第一种方法的效率远远低于其余三种(Clearly the last two ways are way ahead in terms of performance, while for each statement [type 1] is most expensive operation if compared with other three.)
Reason for difference in performance
Last two flavors type 3 and 4 have a very little difference and should be considered as same. They both fetch the size of collection initially. And then uses this size value in loop for checking the condition.
Type 2 uses size() method call every time and thus on runtime it brings a little overhead. Though JVM optimizes this code as inline call and other optimizations also and size method is simply a getter for size attribute of instance of list. Even though it brings a few more statements to execute at machine level code and which makes the difference.
Type 1 is costliest one and simple reasoning is the use of iterator internally created in for each loop. Creating an iterator and calling iterator.get() adds up to most of cost which is not involved in direct access in other three types.
http://howtodoinjava.com/2013/03/26/performance-comparison-of-different-for-loops-in-java/
对ArrayList这样的可使用下标进行随机访问的数据结构,使用下标访问,要比foreach的方式进行顺序访问,速度要快一些。foreach这样写法,使用的过程产生一个额外的对象Enumerator,而且每次访问需要更多的操作,降低性能。
相关推荐
在"java基础for循环练习题"中,我们通常会遇到几种类型的`for`循环,包括基本的`for`循环、增强型`for`循环(也称为foreach循环),以及在数组和集合中的应用。下面我们将深入探讨这些知识点。 1. **基本的for循环*...
在 Java 编程语言中,foreach 和 for 是两种常用的循环语句,都是用于遍历数组或集合的元素。然而,foreach 和 for 之间存在一些关键的区别,了解这些区别对于编写高效的代码非常重要。 foreach 语句,也称为增强 ...
本文主要讨论了如何优化JavaScript和Java中的for循环,以提高编程效率。 首先,我们来回顾一下传统的for循环语法: ```javascript for(var i = 0; i ; i++) { // 对arrays[i]进行处理 } ``` 这段代码适用于遍...
在Java编程语言中,`foreach`循环,也称为增强型for循环或迭代器循环,是处理数组和集合数据的一种简洁高效的方式。这个小视频详细介绍了如何在Java中正确使用`foreach`循环,让我们深入探讨一下相关知识点。 首先...
在处理ArrayList时,`foreach`循环(也称为增强for循环)是常用的迭代方式,它提供了一种简洁、易读的方式来遍历ArrayList中的所有元素。本文将深入探讨`foreach`循环在Java中使用ArrayList的应用及其背后的机制。 ...
在编程领域,循环是一种基本控制结构,用于重复执行一段代码,直到满足特定条件为止。`foreach`循环是其中一种常见的循环...无论是初学者还是经验丰富的开发者,掌握`foreach`循环的使用都是提高效率和代码质量的关键。
Java中的For循环是编程语言中最基础且常用的控制流结构之一,尤其在处理迭代或重复任务时,它的灵活性和效率使其成为...确保下载并查看压缩包中的“javafor”文件,这可能是教程的详细笔记、示例代码或其他辅助材料。
【Java 8 Stream 的 foreach 知识点】 Java 8 引入了 Stream API,它提供了一种新的处理数据的方式,尤其是对于集合操作。在 Stream API 中,`forEach` 是一个常用的函数,用于对流中的每个元素执行指定的操作。...
标题“forEach.rar”可能暗示着我们将在Java 8及更高版本中探讨`forEach`方法,它是`Stream API`的一部分,它提供了一种声明式编程的方式,可以更简洁地处理集合数据。然而,描述中提到的是通过优化传统`for`循环来...
* 提高效率:foreach可以提高遍历操作的效率,减少代码的执行时间。 * 灵活性强:foreach可以遍历各种类型的数组或集合,包括一维数组、二维数组、List、Set等。 六、总结 本文主要介绍了Java foreach的相关原理及...
在MyBatis中,`<foreach>`标签是一个非常重要的元素,它主要用于动态SQL语句的构建,尤其是在处理集合数据类型如List、Array、Map时。...正确理解和熟练运用`<foreach>`,能显著提升MyBatis的开发效率和代码质量。
Java for each实现机制代码原理解析 Java for each实现机制代码原理解析是Java语言中的一种遍历集合元素的机制,通过使用for each循环可以简洁地遍历集合中的元素。下面我们将深入探讨Java for each实现机制的代码...
其中,`foreach`循环(又称为`for-each`或`for...in`循环)是许多编程语言中一个非常重要的特性,尤其在处理数组和集合时显得尤为便捷。`foreach`循环简化了遍历序列元素的过程,提高了代码的可读性和效率。 在Java...
3. **使用增强型for循环(foreach)**:对于集合和数组,增强型for循环更简洁且效率高。 了解并熟练掌握这些循环结构和控制语句,对于编写高效的Java代码至关重要。在实际编程中,要根据具体需求选择合适的循环类型...
1. **语言增强**:Java 6引入了增强的for循环(foreach),简化了遍历集合和数组的代码。此外,它还支持类型安全的自动装箱和拆箱,以及可变参数方法,使得方法调用更加灵活。 2. **编译器优化**:JDK 6的Javac...
总结,Java中遍历`Map`主要有四种方式,其中通过`Map.entrySet()`进行遍历通常被认为效率较高,尤其在`Map`容量较大的情况下。而在Java 8之后,我们可以利用Lambda表达式简化遍历操作。获取`Map`的长度直接调用`size...
Java for循环是编程中最常用的控制流结构之一,用于重复执行一段代码直到满足...在Java 8及以上版本,还有并行for-each循环来提升处理大量数据的效率。理解并掌握这些for循环的使用,有助于编写更加简洁、高效的代码。
13. **`java.util.ArrayList`和`java.util.HashSet`的遍历**:迭代器(Iterator)和增强for循环(foreach)是常见的遍历方式,了解其原理和使用场景。 14. **`java.util.Properties`**:用于读写配置文件,常用于...
Java 6是其历史上的一个关键版本,提供了丰富的API和新的语言特性,如增强的for循环(foreach)、泛型、枚举类型等,这些都极大地提升了开发效率。 Update 21是Java 6的一个重要补丁包,它的主要目的是修复已知的...
Java语言规范第三版对应的是Java 5.0和6.0的关键特性,其中最重要的是泛型(Generics)、枚举(Enums)、自动装箱与拆箱、注解(Annotations)以及增强的for循环(foreach loop)。这些新特性极大地提升了代码的类型...