for循環
1.首先知道,for循環的3個表達式的意思:
表達式1: 一般為賦值表達式,給控制變量賦初值;
表達式2: 關系表達式或邏輯表達式,循環控制條件;
表達式3: 一般為賦值表達式,給控制變量增量或減量。
3個表達式都可以為空,第2個表達式為空,表示條件一直為true,for無限循環。
for(;;){
System.out.println("hello");
}
//輸出結果:無限輸出,瘋狂輸出
hello
hello
……
2.第1個初始化表達式,可以對多個同類型變量賦值;第3個條件若有多個條件,可以用邏輯運算符(&& 、 || 、!)連接;第3個表達式可以用逗號隔開多個表達式
for(int i=0,j=0;i<10&&j<5;i++,j++){
System.out.println("i="+i+",j="+j);
}
for循環優化
1、在參數表達式上優化
1.1、不要在表達式上做復雜運算
如下代碼
List list = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
}
for的第2個表達式上面用了list.size(),這樣就導致了每次循環到這里都要去進行一次list的個數計算,會降低性能;應該改為這樣
List list = new ArrayList<>();
for (int i = 0, len = list.size(); i < len; i++) {
}
1.2、循環嵌套,應該采用外大內小型;也就是循環次數多的for放在外層,循環次數少的for放在內層。
for(int i=0;i<1000;i++){
for(int j=0;j<100;j++){
for(int k=0;k<10;k++){
function(i,j,k);
}
}
}//耗時333 3105 納秒
改為
for(int k=0;k<10;k++){
for(int j=0;j<100;j++){
for(int i=0;i<1000;i++){
function(i,j,k);
}
}
}//耗時282 7670 納秒
2、無用邏輯要放在循環外,避免重復計算發生
int a = 10, b = 11;
for (int i = 0; i < 10; i++) {
i = i * a * b;
}
改為
int c = a * b;
for (int i = 0; i < 10; i++) {
i = i * c;
}
3、try catch語句放到循環外,因為抓捕異常是非常耗時的,所以放到for外面一次抓取
for (int i = 0; i < 10; i++) {
try {
} catch (Exception e) {
}
}
改為
try {
for (int i = 0; i < 10; i++) {
}
} catch (Exception e) {
} 參考資料: http://www.cnblogs.com/ywl925/p/3608192.html http://blog.csdn.net/liushuijinger/article/details/41546347 http://cgs1999.iteye.com/blog/1596671