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

  • 相关阅读:
    Android防止手动添加的本地库文件被NDK工具清理掉
    将驱动编译进Linux内核
    cocos2d-x入门学习笔记——Hello world分析
    linux内核开发入门学习
    makefile工程管理
    GDB程序调试工具
    ios学习笔记_20140308
    Mac Os学习笔记-下载黑屏
    时间过得好快
    做一个关于预防接种的app
  • 原文地址:https://www.cnblogs.com/hongdada/p/6057278.html
Copyright © 2011-2022 走看看