Java中普通for与增强for的使用,首先看看语法结构:
普通for循环语法:
for (int i = 0; i < integ.length; i++) {
System.out.println(interg[i]);
}
增强for循环语法:
for(Integer in : integ){
System.out.println(in);
}
我们的知道在java8之前使用 : for(Integer arr:array) // TODO 在java8之后替代 : array.foreach(obj -> System.out.println(obj )); 写一个小demo看看,使用怎么使用的: public class Demo { public static void main(String [] args) { ArrayList<Integer> array = new ArrayList<Integer>(); array.add(1); array.add(2); array.add(5); array.add(8); Iterator<Integer> iterator = array.iterator(); System.out.println("array.size():"+array.size()); //java8之后替代 array.forEach(obj -> System.out.println("forEach->obj :"+obj )); System.out.println("array.size():"+array.size()); System.out.println("array:"+array); //java8之前使用 for(Integer arr:array){ //array.remove(1); System.out.println("arr:"+arr); } } } 普通for循环还是比foreach要快一点,测试一下,看看事实是否如此: public class ForEachDemo { public static void main(String[] args) { List<Integer> arrayList = new ArrayList<Integer>(); List<Integer> linkList = new LinkedList<Integer>(); // 插入数据 for (int i = 0; i < 100000; i++) { arrayList.add(i); linkList.add(i); } int arry = 0; // 遍历arrayList,用for循环arrayList long forStartTime = System.currentTimeMillis(); for (int i = 0; i < arrayList.size(); i++) { arry = arrayList.get(i); } long forEndTime = System.currentTimeMillis(); System.out.println("for遍历需要:" + (forEndTime - forStartTime) + "毫秒"); // 用增强for循环arrayList long forUpStartTime = System.currentTimeMillis(); for (Integer in : arrayList) { arry = in; } long forUpEndTime = System.currentTimeMillis(); System.out.println("增强for遍历需要:" + (forUpEndTime - forUpStartTime) + "毫秒"); System.out.println("============linkList============"); // 用for循环linkList long linkForStartTime = System.currentTimeMillis(); int link = 0; for (int i = 0; i < linkList.size(); i++) { link = linkList.get(i); } long linkForEndTime = System.currentTimeMillis(); System.out.println("for遍历:" + (linkForEndTime - linkForStartTime) + "毫秒"); // 用增强for循环linkList long linkForeachStartTime = System.currentTimeMillis(); for (Integer in : linkList) { link = in; } long linkForeachEndTime = System.currentTimeMillis(); System.out.println("用增强for遍历需要:" + (linkForeachEndTime - linkForeachStartTime) + "毫秒"); } } run: 可以看出,循环ArrayList时,普通for循环比foreach循环花费的时间要少一点;循环LinkList时,普通for循环比foreach循环花费的时间要多很多。当我将循环次数提升到一百万次的时候,循环ArrayList,普通for循环还是比foreach要快一点;但是普通for循环在循环LinkList时,程序直接卡死。 怎么选择for: 需要循环数组结构的数据时,建议使用普通for循环,因为for循环采用下标访问,对于数组结构的数据来说,采用下标访问比较好。 需要循环链表结构的数据时,一定不要使用普通for循环,这种做法很糟糕,数据量大的时候有可能会导致系统崩溃。