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循環的!
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章