黑马程序员_Java高新技术之增强For循环

来源:互联网 发布:兴业证券软件下载 编辑:程序博客网 时间:2024/04/29 12:56
---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ----------------------

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

缺点:
  对于数组,不能方便的访问下标值;
  对于集合,与使用Iterator相比,不能方便的删除集合中的内容(在内部也是调用Iterator).
除了简单遍历并读取其中的内容外,不建议使用增强的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接口的。

 //以前我们这样写:

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)循环能让我们的代码更加简洁,让程序员使用时更加方便,但是也有它的局限性,所以一定要根据实际需要有选择性地使用,不要盲目追求所谓的“新特性”。

 

---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 曲堤11个村怎么办 信用卡要到期了怎么办 歌华有线怎么办停机 银行卡吐不出来怎么办 遂宁银行办信用卡怎么办 中国银行u盾冻结怎么办 京东账号被拉黑怎么办 自己配电脑系统怎么办 没有京东白条怎么办 还款银行卡丢了怎么办 注销不符合条件房地产怎么办 淘宝买东西买完就降价怎么办 闲鱼收到空包怎么办 咸鱼上没收到货怎么办 沙发颜色错了怎么办 运动鞋网面发黄怎么办 京东不让退货怎么办 第一次送美团又不会怎么办 退货把货寄错了怎么办 冰箱发动机没坏不制冷怎么办 冰箱发动机坏了怎么办 冰箱侧面有坑怎么办 冰箱门上有坑怎么办 冰箱面板磕了怎么办 信用卡寄错地址怎么办 利润低税负低怎么办 公司利润太高怎么办 狗老咬自己的脚怎么办 qq支付忘记密码怎么办 社保存钱晚了怎么办 购机发票丢了怎么办 快递已发货拒收怎么办 买家硬是不退款怎么办 余额宝利息下降怎么办 建行卡没激活怎么办 怎么办长沙银行的卡 淘宝入不了群怎么办 咸鱼上联系不上卖家怎么办 闲鱼联系不上卖家怎么办 卖家想退款要回车辆怎么办 卖家还没发货想退款怎么办