import java.util.ArrayList;
public class Test12
{
public static void main(String[] args)
{
//先判斷後執行
int x = 0;
while(x < 3)
{
System.out.println(x++);
}
System.out.println("===============================>");
//先執行後判斷
do
{
System.out.println(--x);
}
while(x > 0);
System.out.println("===============================>");
for (x = 0; x < 3; x++)
{
System.out.println(x);
}
System.out.println("===============================>");
//for循環可以聲明多個變量,以及複雜的布爾表達式,和循環結尾操作
for(int i = 0, j = 0; i != 0 && j != 0; i++, j++);
//同樣的for循環的第三個表達式也允許執行其他代碼,而非簡單的i++
for (int i = 0; i < 3; System.out.println(i++));
System.out.println("===============================>");
//這種方式也不錯,同樣也可以,但要注意第一個表達式僅運行一次
//但要這麼寫就成了do while了。。。
for (System.out.println(x); x > 0; System.out.println(--x));
System.out.println("===============================>");
//這種寫法是不行的,for的第一個表達式只支持相同類型的多變量聲明
//並且,如果第一個表達式爲聲明變量,後邊將不能在添加初始化的執行
//代碼了
// for (int i = 0,long j = 0; i < 3; i++);
// for (int i = 0,System.out.println(i); i < 3; i++);
//for循環中的複雜布爾表達式,也應該對其進行優化,比如下方的代碼
//當i=2執行完後,i++變成3,仍然會進行判斷,i>0成立,i<3時纔會
//跳出循環
for (int i = 0; i > 0 && i < 3; i++);
//所以正確的做法應該是這樣,在3<3時,直接跳出,當然這裏應該是
//直接i<3一個就行,只不過爲了說明情況,比如嵌套循環裏
for (int i = 0; i < 3 && i > 0; i++);
//比如說輸出1-10中每一個奇數到10之間的所有數
//例如,
//第一步輸出 123456789
//第二步輸出 3456789
for (int i = 0; i < 10; i++, System.out.println())
//這裏以i=0爲例,j就需要判斷10次是不是小於10,而奇數判斷呢?
//也要判斷10次,總共是20次,在加上最後的一次小於10,總21次
// for (int j = i; j < 10 && i % 2 == 1; System.out.print(j++));
//還是以i=0爲例,先奇數判斷,需要11次,而i小於10呢?需要5次
//總共是16次判斷,少了5次
for (int j = i; i % 2 == 1 && j < 10; System.out.print(j++));
System.out.println("===============================>");
//這段代碼看起來毫無問題,事實上很多人覺得list.size更靠譜一些
//但是由於size方法每次的調用都會耗費額外的時間,所以嚴重影響
//效率
ArrayList<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < list.size(); i++);
//這種方式就要好多的,循環內應該儘量避免取值固定的方法調用,應該
//在循環外部定義成變量來保存,以節省循環內的時間消耗來提高效率
int size = list.size();
for (int i = 0; i < size; i++);
//這種方式會導致每次循環都創建以及銷燬變量,對於循環內的變量來說
//應該定義在循環外部,像重構代碼一樣,對於循環內的變量也要重用
for (int i = 0; i < 5; i++)
{
int tmp = i;
tmp = tmp * 2;
}
//比如這個樣子
int tmp;
for (int i = 0; i < 3; i++)
{
tmp = i;
tmp = tmp * 2;
}
//這段代碼看起來很符合邏輯,也沒有錯誤,但效率會很低,原因在節點深度
//的問題,是jvm的問題
for (int i = 0; i < 10; i++)
for (int j = 0; j < 10000; j++);
//這樣效率會提高特別多,尤其是你的內循環裏代碼操作比較多的情況,但有
//一點,這也不是萬能的,比如2維數組,就可能導致數據訪問錯誤,而如果
//整個2維數組都改變排列方式,可能也不太好理解了,畢竟人都習慣了從左上
//開始看矩陣
for (int j = 0; j < 10000; j++)
for (int i = 0; i < 10; i++);
//這是foreach循環,也就是支持迭代的集合,包括數組都可以這樣來寫,但
//實際上所有的for編譯器編譯之後都是while循環,它的功能是取出集合中的
//每一個元素
for (Integer integer : list);
}
}
複習筆記11 循環 以及優化
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.