foreach與正常for循環效率對比

/**
 * 測試for與froEach效率
 * @author 15735400536
 *
 */
public class TestList {
	public static void main(String[] args) {
		List<Integer> array = new ArrayList<Integer>();
		List<Integer> link = new LinkedList<Integer>();
		
		long startTime = 0;
		long endTime = 0;
		
		startTime=System.currentTimeMillis();
		for(int i=0; i<100000; i++) {
			array.add(i);
		}
		endTime=System.currentTimeMillis();
		System.out.println("ArrayList add 花費時間: " + (endTime - startTime));
		
		startTime=System.currentTimeMillis();
		for(int i=0; i<100000; i++) {
			link.add(i);
		}
		endTime=System.currentTimeMillis();
		System.out.println("LinkedList add 花費時間: " + (endTime - startTime));
		
		startTime=System.currentTimeMillis();
		for(int i=0; i<100000; i++) {
			array.get(i);
		}
		endTime=System.currentTimeMillis();
		System.out.println("for 遍歷  ArrayList get 花費時間: " + (endTime - startTime));
		
		startTime=System.currentTimeMillis();
		for(int i=0; i<100000; i++) {
			link.get(i);
		}
		endTime=System.currentTimeMillis();
		System.out.println("for 遍歷 LinkedList get 花費時間: " + (endTime - startTime));
		
		startTime=System.currentTimeMillis();
		for(int i : array) {
			//System.out.println(i);
		}
		endTime=System.currentTimeMillis();
		System.out.println("forEach 遍歷  ArrayList get 花費時間: " + (endTime - startTime));
		
		startTime=System.currentTimeMillis();
		for(int i : link) {
			//System.out.println(i);
		}
		endTime=System.currentTimeMillis();
		System.out.println("forEach 遍歷 LinkedList get 花費時間: " + (endTime - startTime));
	}
}

用for循環arrayList 10萬次花費時間:2毫秒。 用foreach循環arrayList 10萬次花費時間:3毫秒。 用for循環linkList 10萬次花費時間:6163毫秒。 用foreach循環linkList 10萬次花費時間:4毫秒。java

循環ArrayList時,普通for循環比foreach循環花費的時間要少一點。 循環LinkList時,普通for循環比foreach循環花費的時間要多不少。數組

當我將循環次數提高到一百萬次的時候,循環ArrayList,普通for循環仍是比foreach要快一點;可是普通for循環在循環LinkList時,程序直接卡死。數據結構

ArrayList:ArrayList是採用數組的形式保存對象的,這種方式將對象放在連續的內存塊中,因此插入和刪除時比較麻煩,查詢比較方便。測試

LinkList:LinkList是將對象放在獨立的空間中,並且每一個空間中還保存下一個空間的索引,也就是數據結構中的鏈表結構,插入和刪除比較方便,可是查找很麻煩,要從第一個開始遍歷。對象

結論:blog

須要循環數組結構的數據時,建議使用普通for循環,由於for循環採用下標訪問,對於數組結構的數據來講,採用下標訪問比較好索引

須要循環鏈表結構的數據時,必定不要使用普通for循環,這種作法很糟糕,數據量大的時候有可能會致使系統崩潰內存

相關文章
相關標籤/搜索