您的位置:首页 > 编程语言 > Java开发

java中使用增强型的for循环有什么好处

2016-08-11 13:30 447 查看
从Java5.0开始,Java语言就有称为加强版的for循坏,它能够很容易地逐个运行数组或其他集合的元素。这是个很好的强化功能,因为这是for循环很常见的用途。我们会在讨论非数组的集合时再次看到加强版的for循环。
for (String name : nameArray) { }


1、String name--声明会带有数组单一元素的循环变量,数组元素的类型必须与循环变量的类型匹配,name在循环过程中会带有不同元素的值。

2、冒号(:)--代表“in”

3、nameArray--要被逐个运行的集合,这必须是对数组或其他集合的引用。

上面这行程序以中文来说就是:“对nameArray中的每个元素执行一次”而编译器会这么认为:

1、创建名称为name的String变量.

2、将nameArray的第一个元素赋值给name。

3、执行重复的内容。

4、赋值给下一个元素name。

5、重复执行至所有元素都被运行为止。

/*

        for (循环变量类型 循环变量名称 : 要被遍历的对象) 循环体

        例子中,

        1.arr就是为 要被遍历的对象,可以是数组,集合

        2.循环变量类型就是这个arr数组的数据类型,即int

        3.循环变量名称就是a,这个可以自己定义

*/

//增强for循环

public class ForArray

{

        public static void main(String[] args)

        {

                int[] arr = {1,2,3,4,5,6,7};

                for(int a:arr)

                {

                        System.out.print(a);

                }

        }

}

------------------------------------------------------------

加强for循环

  J2SE 1.5提供了另一种形式的for循环。借助这种形式的for循环,可以用更简单地方式来遍历数组和Collection等类型的对象。本文介绍使用这种循环的具体方式,说明如何自行定义能被这样遍历的类,并解释和这一机制的一些常见问题。

  在Java程序中,要“逐一处理”——或者说,“遍历”——某一个数组或Collection中的元素的时候,一般会使用一个for循环来实现(当然,用其它种类的循环也不是不可以,只是不知道是因为for这个词的长度比较短,还是因为for这个词的含义和这种操作比较配,在这种时候for循环比其它循环常用得多)。

  对于遍历数组,这个循环一般是采取这样的写法:

清单1:遍历数组的传统方式

  

  int[] integers = {1, 2, 3, 4};

  

  for (int j = 0; j < integers.length; j++) {

  int i = integers[j];

  System.out.println(i);

  }

  而对于遍历Collection对象,这个循环则通常是采用这样的形式:

清单2:遍历Collection对象的传统方式

  

  String[] strings = {"A", "B", "C", "D"};

  Collection stringList = java.util.Arrays.asList(strings);

  

  for (Iterator itr = stringList.iterator(); itr.hasNext();) {

  Object str = itr.next();

  System.out.println(str);

  }

  而在Java语言的最新版本——J2SE 1.5中,引入了另一种形式的for循环。借助这种形式的for循环,现在可以用一种更简单地方式来进行遍历的工作。

  1. 第二种for循环

  不严格的说,Java的第二种for循环基本是这样的格式:

  for (循环变量类型 循环变量名称 : 要被遍历的对象) 循环体

  借助这种语法,遍历一个数组的操作就可以采取这样的写法:

清单3:遍历数组的简单方式

  

  int[] integers = {1, 2, 3, 4};

  

  for (int i : integers) {

  System.out.println(i);

  }

  这里所用的for循环,会在编译期间被看成是这样的形式:

清单4:遍历数组的简单方式的等价代码

  

  int[] integers = {1, 2, 3, 4};

  

  for (int 变量名甲 = 0; 变量名甲 < integers.length; 变量名甲++) {

  System.out.println(变量名甲);

  }

  这里的“变量名甲”是一个由编译器自动生成的不会造成混乱的名字。

  而遍历一个Collection的操作也就可以采用这样的写法:

清单5:遍历Collection的简单方式

  

  String[] strings = {"A", "B", "C", "D"};

  Collection list = java.util.Arrays.asList(strings);

  

  for (Object str : list) {

  System.out.println(str);

  }

  这里所用的for循环,则会在编译期间被看成是这样的形式:清单6:遍历Collection的简单方式的等价代码 

  String[] strings = {"A", "B", "C", "D"};

  Collection stringList = java.util.Arrays.asList(strings);

  

  for (Iterator 变量名乙 = list.iterator(); 变量名乙.hasNext();) {

  System.out.println(变量名乙.next());

  }

  这里的“变量名乙”也是一个由编译器自动生成的不会造成混乱的名字。

  因为在编译期间,J2SE 1.5的编译器会把这种形式的for循环,看成是对应的传统形式,所以不必担心出现性能方面的问题。

----------------------------------------------------------

For-Each循环

  For-Each循环也叫增强型的for循环,或者叫foreach循环。

  For-Each循环是JDK5.0的新特性(其他新特性比如泛型、自动装箱等)。

  For-Each循环的加入简化了集合的遍历。

 

其语法如下:

  for(type element: array)

  {

        System.out.println(element);

  }

 

例子

  其基本使用可以直接看代码:

  代码中首先对比了两种for循环;之后实现了用增强for循环遍历二维数组;最后采用三种方式遍历了一个List集合。

  

复制代码

import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;

public class ForeachTest

{

    public static void main(String[] args)

    {

        int[] arr = {1, 2, 3, 4, 5};

        

        System.out.println("----------旧方式遍历------------");

        //旧式方式        

        for(int i=0; i<arr.length; i++)

        {

            System.out.println(arr[i]);

        }

        

        System.out.println("---------新方式遍历-------------");

        

        //新式写法,增强的for循环

        for(int element:arr)

        {

            System.out.println(element);

        }

        

        System.out.println("---------遍历二维数组-------------");

        

        //遍历二维数组

        

        int[][] arr2 = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}} ;

        

        for(int[] row : arr2)

        {

            for(int element : row)

            {

                System.out.println(element);

            }

        }

        

        //以三种方式遍历集合List

        

        List<String> list = new ArrayList<String>();

        

        list.add("a");

        list.add("b");

        list.add("c");

        

        System.out.println("----------方式1-----------");

        //第一种方式,普通for循环

        for(int i = 0; i < list.size(); i++)

        {

            System.out.println(list.get(i));

            

        }

        

        System.out.println("----------方式2-----------");

        //第二种方式,使用迭代器

        for(Iterator<String> iter = list.iterator(); iter.hasNext();)

        {

            System.out.println(iter.next());

        }

        System.out.println("----------方式3-----------");

        //第三种方式,使用增强型的for循环

        for(String str: list)

        {

            System.out.println(str);

            

        }

    }

}

复制代码

 

  For-Each循环的缺点:丢掉了索引信息。

  当遍历集合或数组时,如果需要访问集合或数组的下标,那么最好使用旧式的方式来实现循环或遍历,而不要使用增强的for循环,因为它丢失了下标信息。

----------------------------------------------------------

 增强型的for循环 和普通for循环一样

增强型的for循环 优点主要体现在集合中,随便举个例子

比如对 set 的遍历

一般是迭代遍历:

Set<String> set = new HashSet<String>();

Iterator<String> it = set.iterator();

 while (it.hasNext()) {

  String str = it.next();

  System.out.println(str);

 }

for循环遍历:

 for (String str : set) {

      System.out.println(str);

 }

是不是简单些?

优点还体现在泛型 假如 set中存放的是Object

Set<Object> set = new HashSet<Object>();

for循环遍历:

 for (Object obj: set) {

      if(obj instanceof Integer){

                int aa= (Integer)obj;

             }else if(obj instanceof String){

               String aa = (String)obj

             }

              ........

 }

如果你用Iterator遍历,那就晕了

map list 也一样

唯一的缺点就是 在遍历 集合过程中,不能对集合本身进行操作

  for (String str : set) {

   set.remove(str);//错误!

  }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐