1. 程式人生 > >ArrayList和LinkedList add和remove方法的比較

ArrayList和LinkedList add和remove方法的比較

ArrayList 是一種可增長的陣列的實現。
使用ArrayList的優點在於 對 get和set的呼叫是花費常數時間。缺點就是有新的項插入,和現有的項刪除代價昂貴,除非變動是
在ArrayList的末端進行。


使用LinkedList的優點在於新的項的插入和現有的項的刪除開銷很小。這意味著在表的前端進行新增和刪除都是常數時間的操作
,因此LinkedList提供了addFirst,removeFirst,addLast,removeLast,以及getFirst和getLast等都有效的新增刪除和訪問。缺點
就在於它不容易作索引的,所以get的呼叫是昂貴的,除非非常接近表的兩端。


下面就分別使用add和remove操作來看這兩種集合有何差異。

先來看add方法。

package com.songwenjin.list;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class TestList {

	
	public static void makeList1(List<Integer> lst,int N){
		lst.clear();
		long start=System.currentTimeMillis();
		for(int i=0;i<N;i++){
			lst.add(i);
		}
		long end=System.currentTimeMillis();
		System.out.println("向表的末端新增"+N+"條花費的時間="+(end-start)+"毫秒");
	}
	
//向表的末端新增資料
	public static void main(String[] args) {
		int N1=500000;
		int N2=1000000;
		List<Integer> arrayList=new ArrayList<Integer>();
		List<Integer> linkedList=new LinkedList<Integer>();
		makeList1(arrayList,N1);
		makeList1(arrayList,N2);
		
		makeList1(linkedList,N1);
		makeList1(linkedList,N2);
	}
}
列印結果如下

向表的末端新增500000條花費的時間=14毫秒
向表的末端新增1000000條花費的時間=39毫秒
向表的末端新增500000條花費的時間=16毫秒
向表的末端新增1000000條花費的時間=24毫秒


可以看到 不管是ArrayLisst(忽略動態擴容)還是LinkedList作為引數進行傳遞,執行時間都是O(n),就是說是常數的。因為add每次呼叫都是在表的末端進行從而花費的是常數時間(忽略ArrayList的動態擴容)。