zoukankan      html  css  js  c++  java
  • for循环和增强版的for循环

    增强的for循环。

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

    增强for循环和传统for循环的差别: 

      传统for循环能够完毕对语句运行非常多次,由于能够定义控制循环的增量和条件。

    增强的for循环是一种简化的形式,

     它必须有遍历的目标,该目标要么是数组。要么是collection单列集合,对数组的遍历假设不过获取数组的元素,能够用

     增强的for循环。假设要对数组的角标进行操作,建议使用传统for。

    一、遍历数组

    语法为:

    for (Type value : array) {

        expression value;

    }

    //曾经我们这样写:

    void Function ()

    {

        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 Function ()

    {

        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接口的。

     //曾经我们这样写:

    void someFunction ()

    {

        List list = new ArrayList();

        list.add("Hello ");

        list.add("Java ");

        list.add("World!");

        String s = "";

        for (Iterator iter = list.iterator(); iter.hasNext();)

       {

           String temp= (String) iter.next();

           s += temp;

        }

        System.out.println(s);

     }

    //如今我们这样写:

    void someFunction ()

    {

        List list = new ArrayList();

        list.add("Hello ");

        list.add("Java ");

        list.add("World!");

        String s = "";

        for (Object o : list)

       {

           String temp = (String) o;

           s += temp;

       }

       System.out.println(s);

    }

    // 假设结合“泛型”,那么写法会更简单,例如以下:

     void someFunction ()

    {

        List list = new ArrayList();

        list.add("Hello ");

        list.add("Java ");

        list.add("World!");

        String s = "";

        for (String temp : list)

       {

           s += temp; //省去了对强制类型转换步骤

       }

       System.out.println(s);

    }

    //上述代码会被编译器转化为:

     void someFunction ()

    {

        List list = new ArrayList();

        list.add("Hello ");

        list.add("Java ");

        list.add("World!");

        String s = "";

        for (Iterator iter = list.iterator(); iter.hasNext(); )

       {

           String temp = iter.next();

           s += temp;

        }

        System.out.println(s);

     }

    这样的写法的缺点:

        尽管对集合进行的for/in操作会被编译器转化为Iterator操作,可是使用for/in时。Iterator是不可见的,所以假设须要调用Iterator.remove()方法。或其它一些操作。 for/in循环就有些力不从心了。

    综上所述。Java 5.0中提供的增强的for循环——for/in(for each)循环能让我们的代码更加简洁,让程序猿使用时更加方便,可是也有它的局限性,所以一定要依据实际须要有选择性地使用,不要盲目追求所谓的“新特性”。

  • 相关阅读:
    iOS学习之MVC,MVVM,MVP模式优缺点
    iOS学习之单例模式
    iOS学习之观察者模式
    iOS学习之设计模式
    iOS学习之SKTagView的使用
    iOS学习之cocoaPods
    iOS学习之git的使用
    iOS学习之block
    [学习笔记]一个实例理解Lingo的灵敏性分析
    爬虫实例(二)——爬取某宝评论
  • 原文地址:https://www.cnblogs.com/claireyuancy/p/6729429.html
Copyright © 2011-2022 走看看