本篇文章為大家展示了for和foreach的效率對比分析,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
站在用戶的角度思考問題,與客戶深入溝通,找到于洪網(wǎng)站設(shè)計與于洪網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:網(wǎng)站設(shè)計、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、空間域名、網(wǎng)頁空間、企業(yè)郵箱。業(yè)務(wù)覆蓋于洪地區(qū)。
//for循環(huán) public static void main(String[] args) { String[] strs = {"3333", "2222", "1111"}; Listlist = Arrays.asList(strs); list = new ArrayList<>(list); for (int i = 0; i < list.size(); i++){ String str = list.get(i); if (i == 2){ list.remove(str); continue; } System.out.println(str); } } //foreach循環(huán) public static void main(String[] args) { String[] strs = {"3333", "2222", "1111"}; List list = Arrays.asList(strs); list = new ArrayList<>(list); for (String str: list){ if (str.equals("1111")){ //異常拋出點 list.remove(str); continue; } System.out.println(str); } }
先從原理上進行分析,for循環(huán)沒啥好說的,主要是foreach,foreach的源碼如下:
//使用迭代器的next方法遍歷 for (Iterator localIterator = list.iterator(); localIterator.hasNext(); ) { //do something... }
由于foreach是使用的迭代器的方式遍歷的,所以在對最后一個數(shù)據(jù)元素進行remove操作時,會拋出異常。
for循環(huán)運行:
foreach循環(huán)運行:
兩者的效率差:
采用ArrayList對隨機訪問比較快,而for循環(huán)中的get()方法,采用的即是隨機訪問的方法,因此在ArrayList里,for循環(huán)較快。
采用LinkedList則是順序訪問比較快,iterator中的next()方法,采用的即是順序訪問的方法,因此在LinkedList里,使用iterator較快。
代碼:
//for循環(huán)與foreach效率對比 public static void main(String[] args) { //LinkedList運行 Listlist = new LinkedList<>(); //ArrayList運行 // List list = new ArrayList<>(); for (int i = 0; i < 100000; i++){ list.add(i); } long startTime=System.currentTimeMillis(); //獲取開始時間 for (int i = 0; i < list.size(); i++){ //不輸出數(shù)據(jù),程序運行時間太短 System.out.println(list.get(i)); } long endTime=System.currentTimeMillis(); //獲取結(jié)束時間 long fortime = endTime - startTime; startTime=System.currentTimeMillis(); //獲取開始時間 for (int i : list){ //不輸出數(shù)據(jù),程序運行時間太短 System.out.println(i); } endTime=System.currentTimeMillis(); //獲取結(jié)束時間 System.out.println("for運行時間: "+fortime+"ms"); System.out.println("foreach運行時間: "+(endTime - startTime)+"ms"); }
LinkedList運行結(jié)果:
ArrayList運行結(jié)果:
上述內(nèi)容就是for和foreach的效率對比分析,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。