Java增强的for循环和普通for循环对比

简介:

JDK1.5中增加了增强的for循环。

缺点:
  对于数组,不能方便的访问下标值;
  对于集合,与使用Interator相比,不能方便的删除集合中的内容(在内部也是调用Interator).
除了简单遍历并读取其中的内容外,不建议使用增强的for循环。

一、遍历数组

语法为:

for (Type value : array) {
    expression value;
}

//以前我们这样写:

复制代码
void someFunction ()
{
    int[] array = {1,2,5,8,9};
    int total = 0;
    for (int i = 0; i < array.length; i++)
    {
        total += array[i];
     }
    System.out.println(total);
 }
复制代码

//现在我们只需这样写(和以上写法是等价的):

复制代码
void someFunction ()
{
    int[] array = {1,2,5,8,9};
    int total = 0;
    for (int n : array)
   {  
       total += n;
    }
    System.out.println(total);
}
复制代码

这种写法的缺点:

 显而易见,for/in(for each)循环自动控制一次遍历数组中的每一个元素,然后将它赋值给一个临时变量(如上述代码中的int n),然后在循环体中可直接对此临时变量进行操作。这种循环的缺点是:

 1. 只能顺次遍历所有元素,无法实现较为复杂的循环,如在某些条件下需要后退到之前遍历过的某个元素;

 2. 循环变量(i)不可见,如果想知道当前遍历到数组的第几个元素,只能这样写:

复制代码
 int i = 0;
 for (int n : array) {
     System.out.println("This " + i + "-th element in the array is " + n);
     i++;
 }
复制代码

二、遍历集合

 语法为:

for (Type value : Iterable) {
    expression value;
}

注意:for/in循环遍历的集合必须是实现Iterable接口的。

复制代码
 1  //以前我们这样写:
 2 void someFunction ()
 3 {
 4     List list = new ArrayList();
 5     list.add("Hello ");
 6     list.add("Java ");
 7     list.add("World!");
 8     String s = "";
 9     for (Iterator iter = list.iterator(); iter.hasNext();)
10    {
11        String temp= (String) iter.next();
12        s += temp;
13     }
14     System.out.println(s);
15  }
复制代码

 

复制代码
 1 //现在我们这样写:
 2 
 3 void someFunction ()
 4 {
 5     List list = new ArrayList();
 6     list.add("Hello ");
 7     list.add("Java ");
 8     list.add("World!");
 9     String s = "";
10     for (Object o : list)
11    {
12        String temp = (String) o;
13        s += temp;
14    }
15    System.out.println(s);
16 }
复制代码

 

 

复制代码
 1 // 如果结合“泛型”,那么写法会更简单,如下:
 2  void someFunction ()
 3 {
 4     List list = new ArrayList();
 5     list.add("Hello ");
 6     list.add("Java ");
 7     list.add("World!");
 8     String s = "";
 9     for (String temp : list)
10    {
11        s += temp; //省去了对强制类型转换步骤
12    }
13    System.out.println(s);
14 }
15 //上述代码会被编译器转化为:
16  void someFunction ()
17 {
18     List list = new ArrayList();
19     list.add("Hello ");
20     list.add("Java ");
21     list.add("World!");
22     String s = "";
23     for (Iterator iter = list.iterator(); iter.hasNext(); )
24    {
25        String temp = iter.next();
26        s += temp;
27     }
28     System.out.println(s);
29  }
复制代码

 

这种写法的缺点:

虽然对集合进行的for/in操作会被编译器转化为Iterator操作,但是使用for/in时,Iterator是不可见的,所以如果需要调用Iterator.remove()方法,或其他一些操作, for/in循环就有些力不从心了。 综上所述,Java 5.0中提供的增强的for循环——for/in(for each)循环能让我们的代码更加简洁,让程序员使用时更加方便,但是也有它的局限性,所以一定要根据实际需要有选择性地使用,不要盲目追求所谓的“新特性”。

 


本文转自SummerChill博客园博客,原文链接:http://www.cnblogs.com/DreamDrive/archive/2011/11/15/3917138.html,如需转载请自行联系原作者

相关文章
|
1月前
|
Java
Java周期循环的代码可以如此简单
Java周期循环的代码可以如此简单
26 2
|
3月前
|
Java
Java中for循环的六种形态
Java中for循环的六种形态
23 0
|
4月前
|
Java C语言
Java选择与循环
Java选择与循环
35 0
|
4月前
|
算法 Java
7.Java判断和循环+面试相关力扣算法题详解
7.Java判断和循环+面试相关力扣算法题详解
131 1
|
6月前
|
Java 程序员
黑马程序员Java零基础视频教程笔记-判断和循环 1
黑马程序员Java零基础视频教程笔记-判断和循环
39 0
|
6月前
|
Java
java循环
Java中最常用的循环是for循环,for循环的语法如下: for (声明并初始化变量; 判断循环条件; 改变变量的初始值) { 循环的内容 ; 1.声明并初始化变量的操作,在自身循环中只会执行一次 2.每次循环之前,都会判断条件是否成立,只有当条件为true才会执行,如果条件为false则循环结束 在Java中,除了for循环外,还有while循环和do-while循环。while循环的语法如下: while (条件) { 循环的内容 ; } do-while循环的语法如下: do { 循环的内容 ; } while (条件); 这三种循环都可以用来重复执行一段代码,但是在
37 1
|
4月前
|
Java
8.Java循环高级综合练习-无限循环和跳转控制语句,逢七过,平方根,判断是否为质数,猜数字小游戏
8.Java循环高级综合练习-无限循环和跳转控制语句,逢七过,平方根,判断是否为质数,猜数字小游戏
78 1
|
1月前
|
Java 数据库连接 API
Java 学习路线:基础知识、数据类型、条件语句、函数、循环、异常处理、数据结构、面向对象编程、包、文件和 API
Java 是一种广泛使用的、面向对象的编程语言,始于1995年,以其跨平台性、安全性和可靠性著称,应用于从移动设备到数据中心的各种场景。基础概念包括变量(如局部、实例和静态变量)、数据类型(原始和非原始)、条件语句(if、else、switch等)、函数、循环、异常处理、数据结构(如数组、链表)和面向对象编程(类、接口、继承等)。深入学习还包括包、内存管理、集合框架、序列化、网络套接字、泛型、流、JVM、垃圾回收和线程。构建工具如Gradle、Maven和Ant简化了开发流程,Web框架如Spring和Spring Boot支持Web应用开发。ORM工具如JPA、Hibernate处理对象与数
92 3
|
1月前
|
Java
java使用循环案例—
java使用循环案例—
9 0
|
1月前
|
Java 开发者 Spring
【Java】Spring循环依赖:原因与解决方法
【Java】Spring循环依赖:原因与解决方法
37 0