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分析总结的主要内容,如果未能解决你的问题,请参考以下文章
Android 逆向整体加固脱壳 ( DEX 优化流程分析 | DexPrepare.cpp 中 dvmOptimizeDexFile() 方法分析 | /bin/dexopt 源码分析 )(代码片段