導航:首頁 > 源碼編譯 > java循環編譯線性表

java循環編譯線性表

發布時間:2023-06-29 00:19:14

java中迭代列表中數據時幾種循環寫法的效率比較

Java中經常會用到迭代列表數據的情況,本文針對幾種常用的寫法進行效率比較。雖然網上已經有了類似的文章,但是對他們的結論並不認同。常見的實現方法:1.for循環:for(int i = 0; i < list.size(); i++) for(int i = 0, size = list.size(); i < size; i++) 一般人都會認為第二種寫法效率高。 2.foreach:for(Object obj : list) 這是一種簡潔的寫法,只能對列表進行讀取,無法修改。 3.while:int size = list.size(); while(size-- > 0) 4.迭代: Object iter = list.iterator(); while(iter.hasNext()) { iter.next(); }測試代碼: 針對以上幾種方法編寫的測試代碼。 public static void main(String[] args) { List list = new ArrayList(); int runTime = 1000;//執行次數 for (int i = 0; i < 1000 * 1000; i++) { list.add(i); } int size = list.size(); long currTime = System.currentTimeMillis();//開始分析前的系統時間 //基本的for for(int j = 0; j < runTime; j++) { for (int i = 0; i < size; i++) { list.get(i); } } long time1 = System.currentTimeMillis(); //foreach for(int j = 0; j < runTime; j++) { for (Integer integer : list) { } } long time2 = System.currentTimeMillis(); for(int j = 0; j < runTime; j++) { //while int i = 0 ; while(i < size){ list.get(i++); } } long time3 = System.currentTimeMillis(); for(int j = 0; j < runTime; j++) {//普通for循環 for (int i = 0; i < list.size(); i++) { list.get(i); } } long time4 = System.currentTimeMillis(); for(int j = 0; j < runTime; j++) {//迭代 Iterator iter = list.iterator(); while(iter.hasNext()) { iter.next(); } } long time5 = System.currentTimeMillis(); long time = time1 - currTime ; System.out.print("use for:" + time); time = time2 - time1; System.out.print("\tuse foreach:" + time); time = time3 - time2; System.out.print("\tuse while:" + time); time = time4 - time3; System.out.print("\tuse for2:" + time); time = time5 - time4; System.out.print("\tuse iterator:" + time); System.out.println(); }輸出結果(JDK1.6):1.use for:8695 use foreach:17091 use while:6867 use for2:7741 use iterator:14144 2.use for:8432 use foreach:18126 use while:6905 use for2:7893 use iterator:139763.use for:8584 use foreach:17177 use while:6875 use for2:7707 use iterator:14345 結論:1.針對列表的 foreach的效率是最低:耗時是普通for循環的2倍以上。個人理解它的實現應該和iterator相似。2. list.size()的開銷很小:list.size()次數多少對效率基本沒有影響。查看ArrayList的實現就會發現,size()方法的只是返回了對象內的長度屬性,並沒有其它計算,所以只存在函數調用的開銷。對數組的測試:將代碼中的列表list換做數組再進行測試(iterator不適用),發現耗時基本為0。說明: 3. 列表的get()方法開銷不少應該主要是檢測數據合法性時產生的。將執行次數增加100萬倍,這時可以看出結果基本相等,並沒有明顯的差異。說明:4. 數組length也沒有開銷可見數組長度並不是每次執行的時候都要計算的。聯想一下Java創建數組的時候要求必須指定數組的長度,編譯處理的時候顯然沒有把這個值拋棄掉。網上有一篇類似的文章,它居然得出了一個foreach執行效率最高的結論。

⑵ 用Java里的for循環編譯出來

String[] strs=new String[]{"A","B","C","D","E","F","G"};
for(int i=0;i<strs.length;i++){
for(int j=strs.length-1;j>i;j--){
System.out.print(" ");
}
for(int k=0;k<i*2+1;k++){
System.out.print(strs[i]+" ");
}
System.out.println();
}
這段代碼直接放在main方法裡面運行就能輸出你要的效果了

⑶ java循環輸出100次java

方法一:while循環
public class Test{
public static void main(String[] args){
int i=1;
while(i<101){ //循環100次
System.out.print("java:"+i+"次"); //每次循環列印一次java
System.out.println(); //列印空行
i++;
}
}

方法二:for循環
public class Test{
public static void main(String[] args){
for (int i=0; i<100; i++ ){ //循環100次
System.out.print("java:"+(i+1)+"次"); //每次循環列印一次java
}
System.out.println(); //列印空行
}
}

閱讀全文

與java循環編譯線性表相關的資料

熱點內容
dvd光碟存儲漢子演算法 瀏覽:757
蘋果郵件無法連接伺服器地址 瀏覽:963
phpffmpeg轉碼 瀏覽:671
長沙好玩的解壓項目 瀏覽:145
專屬學情分析報告是什麼app 瀏覽:564
php工程部署 瀏覽:833
android全屏透明 瀏覽:737
阿里雲伺服器已開通怎麼辦 瀏覽:803
光遇為什麼登錄時伺服器已滿 瀏覽:302
PDF分析 瀏覽:485
h3c光纖全工半全工設置命令 瀏覽:143
公司法pdf下載 瀏覽:382
linuxmarkdown 瀏覽:350
華為手機怎麼多選文件夾 瀏覽:683
如何取消命令方塊指令 瀏覽:349
風翼app為什麼進不去了 瀏覽:778
im4java壓縮圖片 瀏覽:362
數據查詢網站源碼 瀏覽:150
伊克塞爾文檔怎麼進行加密 瀏覽:892
app轉賬是什麼 瀏覽:163