您好,登錄后才能下訂單哦!
本篇文章為大家展示了for和foreach的效率對比分析,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
//for循環(huán) public static void main(String[] args) { String[] strs = {"3333", "2222", "1111"}; List<String> list = 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<String> 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運行 List<Integer> list = new LinkedList<>(); //ArrayList運行 // List<Integer> 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)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。