Java-foreach分析总结

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java-foreach分析总结相关的知识,希望对你有一定的参考价值。

今天晚上被定积分搞得头昏,拿烟的手,微微颤抖。

 

foreach总结:

  foreach是java5的新特性,有人说是抄袭C#的,我也不太清楚,反正会用就行了,主要增强了for循环,在遍历数组和集合上面很方便。

foreach是for循环的简化版本,但是foreach不能完全取代for循环,然而任何foreach都可以改写为for循环,foreach不是一个关键字,主要就是这个格式,每一个for的意思。

 

foreach语句格式:

  for(元素类型type  元素变量value : 遍历对象obj) { 

    引用x的java语句;  

}

 

下面看几段代码,看看foeeach的强大和简便:

 

  1 package cn.zpoor;
  2 
  3 import java.util.List;
  4 import java.util.ArrayList;
  5 import java.util.Arrays;
  6 
  7 /**
  8  * @author 薛定谔的猫
  9  * foreach遍历数组和集合*/
 10 public class TestArray {
 11 
 12     public void initArray() {
 13         //定义并且初始化一个数组
 14         int arr[] = {2,5,3};
 15         System.out.println("-----排序前的一维数组:");
 16         for(int x:arr) {
 17             System.out.print(x + " ");//foreach循环逐个输入数组元素的值
 18         }
 19         System.out.println();
 20         
 21         //数组冒泡排序
 22         Arrays.sort(arr);
 23         //foreach输出排序之后的数组元素
 24         System.out.println("-----排序后的一维数组:");
 25         for(int x:arr) {
 26             System.out.print(x+" ");
 27         }
 28         System.out.println();
 29     }
 30     
 31     //集合转换成数组
 32     public void listToArray() {
 33         //创建list并且添加元素
 34         List<String> list = new ArrayList<String>();
 35         list.add("1");
 36         list.add("2");
 37         list.add("5");
 38         
 39         //foreach循环输出集合元素
 40         System.out.println("-----foreach输出集合元素");
 41         for(String x:list) {
 42             System.out.println(x+ " ");
 43         }
 44         System.out.println();
 45         
 46         //把ArrayList转换成数组
 47         Object[] obj = list.toArray();
 48         System.out.println("-----foreach输出集合转换而来的数组元素");
 49         for(Object x:obj) {
 50             System.out.print(x.toString()+ " ");//逐个输出数字元素的值
 51         }
 52         System.out.println();
 53     }
 54     
 55     //foreach输出二维数组
 56     public void twoDimensionArray() {
 57         int arr[][] = {{1,2},{3,4}};
 58         System.out.println("-----foreach输出二维数组");
 59         for(int[] x:arr) {
 60             for(int e:x) {
 61                 System.out.print(e+ " ");//逐个输出数组元素,多维数组的本质就是没有多维数组
 62             }
 63         }
 64         System.out.println();
 65     }
 66     
 67     //foreach输出三维数组
 68     public void threeDimensionArray() {
 69         int arr[][][] = {
 70                 {{1,2},{3,4}},
 71                 {{5,6},{7,8}}
 72         };
 73         
 74         System.out.println("-----foreach输出三维数组");
 75         for(int[][] x:arr) {
 76             for(int[] y:x) {
 77                 for(int z:y) {
 78                     System.out.print(z + " ");//三重循环,有点作死
 79                 }
 80             }
 81         }
 82     }
 83     
 84     public static void main(String[] args) {
 85         TestArray test = new TestArray();
 86         test.initArray();
 87         test.listToArray();
 88         test.twoDimensionArray();
 89         test.threeDimensionArray();
 90     }
 91 }
 92 
 93 /*-----排序前的一维数组:
 94 2 5 3 
 95 -----排序后的一维数组:
 96 2 3 5 
 97 -----foreach输出集合元素
 98 1 
 99 2 
100 5 
101 
102 -----foreach输出集合转换而来的数组元素
103 1 2 5 
104 -----foreach输出二维数组
105 1 2 3 4 
106 -----foreach输出三维数组
107 1 2 3 4 5 6 7 8 
108 */

 

foreach的局限性:

  如果要是引用数组或者集合的索引,foreach就没法做到了,因为foreach只是遍历一边数组或者集合。

 

举个栗子:

 1 package cn.zpoor;
 2 /**
 3  * @author 薛定谔的猫
 4  * foreach的局限性*/
 5 public class TestForeach {
 6     public static void main(String[] args) {
 7         //定义一个数组
 8         int[] arr = new int[4];
 9         System.out.println("输出赋值前定义的数组");
10         
11         for(int x:arr) {
12             System.out.println(x);
13         }
14         
15         //通过索引赋值
16         System.out.println("给定义的数组赋值");
17         for(int i = 3;i>0;i--) {
18             arr[i] = i;
19         }
20         
21         //输出赋值之后的数组
22         System.out.println("foreach输出赋值之后的一维数组");
23         for(int x:arr) {
24             System.out.println(x);
25         }
26     }
27 }
28 
29 /*输出赋值前定义的数组
30 0
31 0
32 0
33 0
34 给定义的数组赋值
35 foreach输出赋值之后的一维数组
36 0
37 1
38 2
39 3
40 */

 

 

Conclusion:

  foreach是for循环的增强版本,简化了编程,提高了代码的可读性和安全性(数组越界)。在遇到数组或者集合索引的情况下,foreach就不好用了,。而且foreach一般结合泛型使用。

 

以上是关于Java-foreach分析总结的主要内容,如果未能解决你的问题,请参考以下文章

BootStrap有用代码片段(持续总结)

BootStrap实用代码片段(持续总结)

回归 | js实用代码片段的封装与总结(持续更新中...)

查看发票组代码后的总结和有感

Android 逆向整体加固脱壳 ( DEX 优化流程分析 | DexPrepare.cpp 中 dvmOptimizeDexFile() 方法分析 | /bin/dexopt 源码分析 )(代码片段

变量的内存分析图