zoukankan      html  css  js  c++  java
  • Java foreach

    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循环,因为它丢失了下标信息。

  • 相关阅读:
    网页HTML到8.20前
    数据库SQLServer
    构建之法读后感
    VS2013 生成安装文件
    工大助手(自动化部署)
    工大助手(用户名、密码错误提示)
    工大助手(验证码错误提示)
    工大助手(加权成绩计算)
    Wireshark插件编写
    微软认知服务——人脸识别
  • 原文地址:https://www.cnblogs.com/hongdada/p/6057278.html
Copyright © 2011-2022 走看看