1. 程式人生 > >java增強型for迴圈和普通迴圈比較

java增強型for迴圈和普通迴圈比較

增強型for迴圈和普通迴圈比較:      (1)對於非集合類(沒有實現 Iterable介面)的陣列遍歷,增強型for迴圈和普通迴圈遍歷原理相同,效率相同      (2)對於集合類(實現了Iterable介面),增強型for迴圈的遍歷其本質就是迭代器 iterator的遍歷,和普通迴圈遍歷相比,各自有自己適用的場景,比如說普通for迴圈比較適合List類(陣列類)遍歷通過下標查詢資料的,而增強型for迴圈則比較適合連結串列結構的集合的遍歷。
一.對於基本陣列類的遍歷,我就不舉例子說明了,大家可以通過遍歷一個日大的陣列,通過檢視兩種方式遍歷的時間差,基本是相同的。當然,也可以通過 javap命令,檢視執行的虛擬機器指令對比(這是從底層檢視執行,想了解的朋友,可以檢視我的虛擬機器介紹部分),可以看到普通for迴圈和增強型for迴圈執行相同。 二.集合類,增強型for迴圈和普通for迴圈比較     增強型for迴圈和iterator遍歷是一樣的,可以通過檢視編譯後的class檔案,或者通過javap命令看到。    那麼普通for迴圈和迭代器遍歷又有什麼區別呢?      大家知道普通for迴圈是通過下標訪問的,所以非常適用於類似於List這種下標獲取(list.get(0))內容的集合.而增強型for迴圈(iterator遍歷)則比較適合於連結串列的遍歷,下面咱通過例項測試說明:
   
                List<String> list = new ArrayList<String>();
		for (int i = 0; i < 500000; i++) {
			list.add("xiaotang");
		}

		long start = System.currentTimeMillis();
		int size = list.size();
		String str = null;
		for (int i = 0; i < size; i++) {
			str = list.get(i);
		}
		System.out.println("for + get(i)方法: "
				+ (System.currentTimeMillis() - start));

		long start2 = System.currentTimeMillis();
		for (String str1 : list) {
		}
		System.out.println("Iterator(foreach)方法:"
				+ (System.currentTimeMillis() - start2));
    執行結果如下:
   
可以看到:對於ArrayList集合,新增500000記錄,然後通過普通for迴圈遍歷明顯快於增強型for迴圈。 那麼連結串列類集合的遍歷呢?我們在這裡使用 LinkedList測試,測試程式碼如下:
                List<String> list = new LinkedList<String>();
		for (int i = 0; i < 5000; i++) {
			list.add("xiaotang");
		}

		long start = System.currentTimeMillis();
		int size = list.size();
		String str = null;
		for (int i = 0; i < size; i++) {
			str = list.get(i);
		}
		System.out.println("for + get(i)方法: "
				+ (System.currentTimeMillis() - start));

		long start2 = System.currentTimeMillis();
		for (String str1 : list) {
		}
		System.out.println("Iterator(foreach)方法:"
				+ (System.currentTimeMillis() - start2));

    執行結果如下:
   
   可以看到對於連結串列結構的遍歷,增強型for迴圈的遍歷速度是遠遠快於普通for迴圈的!
 

相關推薦

java增強型for迴圈普通迴圈比較

增強型for迴圈和普通迴圈比較:      (1)對於非集合類(沒有實現 Iterable介面)的陣列遍歷,增強型for迴圈和普通迴圈遍歷原理相同,效率相同      (2)對於集合類(實現了Iterable介面),增強型for迴圈的遍歷其本質就是迭代器 iterator的

Java流程控制的陷阱——for迴圈foreach迴圈的陷阱

5、for迴圈的陷阱 5、1 分號的問題 public class SemicolonRight { public static void main(String[] args) { for ( int j = 1 , i = 0 ; i < 5 &&

java增強型for迴圈(三種遍歷集合方式)

For-Each迴圈         For-Each迴圈也叫增強型的for迴圈,或者叫foreach迴圈。    For-Each迴圈是JDK5.0的新特性(其他新特性比如泛型、自動裝箱等)。    For-Each迴圈的加入簡化了集合的遍歷。 語法如下: fo

shell指令碼中的for迴圈while迴圈

基礎for迴圈有三種:         ①直接寫-------例如:for  i   in  1,2,3,4(注:i 是變數; in是在什麼地方;do和done之間是迴圈體)         &n

for迴圈 while迴圈

for(初始化;布林表示式;更新){} 1. 初始化 2. 檢測布林表示式的值,true,執行 迴圈體; false,跳出迴圈 3. 執行迴圈體後,更新變數值 如果想在迴圈結束後使用判斷條件語句的變數,使用while迴圈; 而for中變數及早的從記憶體

淺談js中的for迴圈while迴圈

-for迴圈: 它的語法如下: for (語句 1; 語句 2; 語句 3) { 被執行的程式碼塊 } 語句 1 在迴圈(程式碼塊)開始前執行 語句 2 定義執行迴圈(程式碼塊)的條件 語句 3 在迴圈(程式碼塊)已被執行之後執行

python基礎--for in while迴圈

程式清單: # do_loop.py program = ['c', 'java', 'python'] for name in program:     print(name) sum = 0 for x in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10

Java 單向連結串列單向迴圈連結串列的程式碼實現

這個連結串列,以前上學的時候,學c語言,還是資料結構的時候,學過。也許也實現過吧。下面我就簡單記錄下這個連結串列的實現。 單向連結串列跟單向迴圈連結串列的差別就是:單向連結串列是有結束位的,指向null的時候,就到結尾了,但是單向迴圈連結串列,他就是一個圈,要是不設定指定位

c++ 簡單例項羅列 金字塔效果(for迴圈while迴圈

一:簡單輸出 #include<stdio.h> int main() { int i; for(i=1;i<=5;i++) { printf("*"); } } #include<stdio.h> int main() { in

for迴圈while迴圈優缺點

在for迴圈中,迴圈控制變數的初始化和修改都放在迴圈頭部分,形式較簡潔,且特別適用於迴圈次數已知的情況。 在while迴圈中,迴圈控制變數的初始化一般放在while語句之前,迴圈控制變數的修改一般放在迴圈體中,形式上不如for語句簡潔,但它比較適於迴圈次數不易預知的情況(用

for迴圈的基本應用 巢狀迴圈 do while迴圈 while迴圈的區別 面試題

day for迴圈 for迴圈與do-while 迴圈 do - while迴圈 do …while迴圈的語法 do{ 迴圈體; }while(); //此處有一個分號!!! 注意 do - while迴圈最後面

JS輸出水仙花數for迴圈while迴圈實現

輸出所有的水仙花數,水仙花數:各個位數立方和等於這個數的三位數,//算次方的方法:Math.pow(m,n); ->m的n次方<!DOCTYPE html> <html lang="zh-CN"> <head> <meta c

for迴圈while迴圈的區別

當知道執行次數的時候一般用for 當條件迴圈時一般用while 例如: for i=0,i<n,i++ {} 這裡n是已知數,可以迴圈n次 while i<n {} 不知道要迴圈多少次,但當i>=n的時候停止迴圈 do while迴圈總會執行一次,f

JavaScript | for迴圈while迴圈的區別

寫在前面:for迴圈和while迴圈語法規則略有不同,兩種方法可以替換使用,但是在部分問題上各有優勢。主要程式碼://猜數字遊戲,謎底:50; //使用者可以猜5次 ,若使用者猜的小於50,提示:猜小了;否則提示猜大了;猜中了,提示:中獎了(不能繼續猜謎) var i=1

1.2.3 Python中的for迴圈while迴圈

For迴圈的基本結構是:for 迴圈規則:操作語句1,簡單迴圈從基本結構看,其有著同if條件語句類似的地方:都有冒號;語句塊都要縮排。這些是不可或缺的。>>> a="hello">>> for i in a: print ihello也可以

for迴圈while迴圈區別

for迴圈,while迴圈旨在與迭代一個數組,最終完成結果一樣。區別:for迴圈變數的作用域在於for迴圈內,而while迴圈變數的作用域在while外部。for(int i=0;i<5;i++){    //i在for迴圈內部,外部不可能使用這個i值}int j=0;

《Shell 程式設計》09_while 迴圈 until 迴圈

《Shell 程式設計》09_while 迴圈和 until 迴圈 標籤(空格分隔): Shell 文章目錄 《Shell 程式設計》09_while 迴圈和 until 迴圈 9.1 當型和直到型迴圈語法 9.1.

26 Java學習之NIOIO得比較

轉自:https://www.cnblogs.com/aspirant/p/8630283.html    一、概念      NIO即New IO(非阻塞IO),這個庫是在JDK1.4中才引入的。NIO和IO有相同的作用和目的,

python while迴圈雙重迴圈

#python中,while語句用於迴圈執行程式,即在某個條件下,迴圈執行某段程式,以處理需要重複處理的相同任務。 #while是“當型”迴圈結構。 i=1 while i<=20: print(i,end=" ") i+=1 sum=0 i=1 while i<=

Java中static方法普通方法的區別

在類中使用static修飾的靜態方法會隨著類的定義而被分配和裝載入記憶體中;而非靜態方法屬於物件的具體例項,只有在類的物件建立時在物件的記憶體中才有這個方法的程式碼段。 注意:非靜態方法既可以訪問靜態資料成員 又可以訪問非靜態資料成員,而靜態方法只能訪問靜