增强型for循环的用法

增强型for循环语法:for(ElementType element:arrayName){};
举个例子:(1)
int[] numArray = { 1, 2, 3, 4, 5, 6 };
for (int i : numArray) {
    System.out.print(i);
}
//结果会是123456 

测试方法 

public static void testFor() {
 
    int [] array = {1,2,3};
    for(int i : array){
        System.out.println(i);
    }
    List list = new ArrayList();
    list.add(1);
    list.add(2);
    list.add(3);
    for(Object obj : list){
        System.out.println(obj);
    }
 
    Map<String, String> map = new HashMap<>();
    map.put("1", "1");
    map.put("2", "2");
    map.put("3", "3");
    for (Map.Entry<String, String> stringStringEntry : map.entrySet()) {
        System.out.println(stringStringEntry.getKey() + stringStringEntry.getValue());
    }
 
}
使用idea查询编译后的class文件

编译后的文件信息为

public static void testFor() {
    int[] array = new int[]{1, 2, 3};
    int[] arr$ = array;
    int len$ = array.length;
 
    for(int i$ = 0; i$ < len$; ++i$) {
        int i = arr$[i$];
        System.out.println(i);
    }
 
    List list = new ArrayList();
    list.add(1);
    list.add(2);
    list.add(3);
    Iterator i$ = list.iterator();
 
    while(i$.hasNext()) {
        Object obj = i$.next();
        System.out.println(obj);
    }
 
    Map<String, String> map = new HashMap();
    map.put("1", "1");
    map.put("2", "2");
    map.put("3", "3");
    Iterator i$ = map.entrySet().iterator();
 
    while(i$.hasNext()) {
        Entry<String, String> stringStringEntry = (Entry)i$.next();
        System.out.println((String)stringStringEntry.getKey() + (String)stringStringEntry.getValue());
    }
 
}
我们发现增强for循环遍历数组时使用的普通for循环,而遍历集合时使用的Iterator迭代器

增强型for循环删除的问题
 测试Java代码

public static void testFor() {
 
    List list = new ArrayList();
    list.add(1);
    list.add(2);
    list.add(3);
    for(Object obj : list){
        System.out.println(obj);
        list.remove(obj);
    }
 
}
编译后的class文件信息

public static void testFor() {
    List list = new ArrayList();
    list.add(1);
    list.add(2);
    list.add(3);
    Iterator i$ = list.iterator();
 
    while(i$.hasNext()) {
        Object obj = i$.next();
        System.out.println(obj);
        list.remove(obj);
    }
 
}
 执行后

Exception in thread "main" java.util.ConcurrentModificationException
    at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:859)
    at java.util.ArrayList$Itr.next(ArrayList.java:831)
    at com.test.controller.TestMain.testFor(TestMain.java:108)
    at com.test.controller.TestMain.main(TestMain.java:23)
解释说明:

迭代器内部的每次遍历都会记录List内部的modcount当做预期值,然后在每次循环中用预期值与List的成员变量modCount作比较,但是普通list.remove调用的是List的remove,这时modcount++,但是iterator内记录的预期值=并没有变化,所以会报错。

相关源码:

java.util.ArrayList#fastRemove

java.util.ArrayList.Itr#remove

增强型for循环注意事项

在使用增强型for循环不支持遍历时删除元素
使用增强型for循环时,对遍历的集合需要做null判断,不然可能引发空指针异常。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,我可以用中文回答你的问题。 以下是一个示例程序,可以创建并初始化三个一维数组,使用三种不同的方式,并使用循环打印输出。其中,第一个数组使用增强型for循环,第二个数组使用传统的for循环,第三个数组使用while循环。请注意,这只是一个示例程序,你可以根据自己的需要进行修改和调整。 ``` public class ArrayDemo { public static void main(String[] args) { // 创建并初始化三个一维数组 int[] array1 = {1, 2, 3, 4, 5}; int[] array2 = new int[5]; for (int i = 0; i < 5; i++) { array2[i] = i + 1; } int[] array3 = new int[5]; int i = 0; while (i < 5) { array3[i] = i + 1; i++; } // 使用增强型for循环打印输出第一个数组 System.out.print("array1:"); for (int num : array1) { System.out.print(num + " "); } System.out.println(); // 使用传统的for循环打印输出第二个数组 System.out.print("array2:"); for (int j = 0; j < 5; j++) { System.out.print(array2[j] + " "); } System.out.println(); // 使用while循环打印输出第三个数组 System.out.print("array3:"); int k = 0; while (k < 5) { System.out.print(array3[k] + " "); k++; } System.out.println(); } } ``` 在这个程序中,我们首先创建并初始化了三个一维数组。其中,第一个数组使用了简化的初始化方式,直接将数组元素放在花括号中。第二个数组使用了传统的方式,通过循环赋值。第三个数组也使用了循环赋值,但是是通过while循环实现的。 接着,我们使用了三种不同的方式打印输出这三个数组。第一个数组使用了增强型for循环,第二个数组使用了传统的for循环,第三个数组使用了while循环。注意,在打印输出时,我们使用了System.out.print方法,而不是System.out.println方法,这是为了将多个元素打印在同一行上。 希望这个示例程序能够对你有所帮助! ### 回答2: 编写程序创建并初始化三个一维数组,使用三种不同的方式,并使用循环打印输出,初始值任意。要求使用带增强型for循环的和不带增强型for循环两种,都要体现在程序里。 首先,定义三个一维数组,并初始化它们的值: ```java int[] array1 = {1, 2, 3, 4, 5}; // 使用静态初始化方式 int[] array2 = new int[5]; // 使用动态初始化方式 array2[0] = 6; array2[1] = 7; array2[2] = 8; array2[3] = 9; array2[4] = 10; int[] array3 = new int[]{11, 12, 13, 14, 15}; // 使用默认初始化方式 ``` 接下来,使用不带增强型for循环打印输出数组: ```java System.out.println("使用不带增强型for循环打印输出:"); for (int i = 0; i < array1.length; i++) { System.out.print(array1[i] + " "); } System.out.println(); for (int i = 0; i < array2.length; i++) { System.out.print(array2[i] + " "); } System.out.println(); for (int i = 0; i < array3.length; i++) { System.out.print(array3[i] + " "); } System.out.println(); ``` 然后,使用带增强型for循环打印输出数组: ```java System.out.println("使用带增强型for循环打印输出:"); for (int num : array1) { System.out.print(num + " "); } System.out.println(); for (int num : array2) { System.out.print(num + " "); } System.out.println(); for (int num : array3) { System.out.print(num + " "); } System.out.println(); ``` 以上程序通过不带增强型for循环和带增强型for循环分别实现了对三个一维数组的打印输出,分别体现了两种循环用法。 ### 回答3: 以下是一个用Java编写的程序来创建和初始化三个一维数组,并使用三种不同的方式进行打印输出。其中包括带增强型for循环和不带增强型for循环两种方式。 ```java public class ArrayExample { public static void main(String[] args) { int[] array1 = {1, 2, 3, 4, 5}; int[] array2 = new int[5]; for (int i = 0; i < 5; i++) { array2[i] = i + 1; } int[] array3 = new int[]{5, 4, 3, 2, 1}; // 使用带增强型for循环打印输出 System.out.println("使用带增强型for循环打印输出:"); for (int num : array1) { System.out.print(num + " "); } System.out.println(); for (int num : array2) { System.out.print(num + " "); } System.out.println(); for (int num : array3) { System.out.print(num + " "); } System.out.println(); // 使用不带增强型for循环打印输出 System.out.println("使用不带增强型for循环打印输出:"); for (int i = 0; i < array1.length; i++) { System.out.print(array1[i] + " "); } System.out.println(); for (int i = 0; i < array2.length; i++) { System.out.print(array2[i] + " "); } System.out.println(); for (int i = 0; i < array3.length; i++) { System.out.print(array3[i] + " "); } System.out.println(); } } ``` 这个程序会创建三个一维数组`array1`,`array2`和`array3`,并分别用三种不同的方式初始化。然后使用带增强型for循环和不带增强型for循环分别对这三个数组进行打印输出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值