码迷,mamicode.com
首页 > 编程语言 > 详细

Java foreach

时间:2016-11-12 19:45:59      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:native   com   invoke   cut   class   []   string   add   安全性   

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

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

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        int arr[] = new int[4];
        for (int x : arr) {
            System.out.println(x);
        }
        for (int i = 3; i > 0; i--) {
            arr[i] = i;
        }
        System.out.println(Arrays.toString(arr));
    }
}
0
0
0
0
[0, 1, 2, 3]

对它进行修改:

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        int arr[] = new int[4];
        for(int num:arr){
            num=3;
        }
        System.out.println(Arrays.toString(arr));
    }
}
[0, 0, 0, 0]

发现修改对其无效,但是也不报错。

add:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        String[] strArray={"111","222","333","444"};
        List<String> list=new ArrayList<String>(Arrays.asList(strArray));
        System.out.println(list);
        for(String str:list){
            System.out.println(str);
            list.add("sss");
            System.out.println("添加后:"+list);
        }
    }
}
Exception in thread "main" java.util.ConcurrentModificationException
[111, 222, 333, 444]
    at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
111
    at java.util.ArrayList$Itr.next(ArrayList.java:851)
添加后:[111, 222, 333, 444, sss]
    at com.qhong.Main.main(Main.java:13)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)

remove:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        String[] strArray={"111","222","333","444"};
        List<String> list=new ArrayList<String>(Arrays.asList(strArray));
        System.out.println(list);
        for(String str:list){
            System.out.println(str);
            list.remove(str);
            System.out.println("移除后:"+list);
        }
    }
}
[111, 222, 333, 444]
Exception in thread "main" java.util.ConcurrentModificationException
111
    at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
移除后:[222, 333, 444]
    at java.util.ArrayList$Itr.next(ArrayList.java:851)
    at com.qhong.Main.main(Main.java:15)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)

Process finished with exit code 1

 

foreach这种循环一般只适合做数组的遍历,提取数据显示等,不适合用于添加删除和使用下标等复杂的操作。

foreach语句是for语句特殊情况下的增强版本,简化了编程,提高了代码的可读性和安全性(不用怕数组越界)。相对老的for语句来说是个很好的补充。

foreach循环的缺点:丢掉了索引信息。

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

Java foreach

标签:native   com   invoke   cut   class   []   string   add   安全性   

原文地址:http://www.cnblogs.com/hongdada/p/6057278.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!