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循环,这种做法很糟糕,数据量大的时候有可能会导致系统崩溃。