在SUN的網站中有一篇介紹如何使用使用ArrayList/LinkedList 及使用0 長度的Array的文章,
覺得這兩個物件平時佷常用,但是比較少去注意細節的部份.以下把自己看完的心得寫下來.
原文出處: <http://java.sun.com/javase/reference/techart.jsp>
ArrayList and LinkedList 是兩個collection物件.
其實ArrayList背後是用Object array,也因為這原因,它在隨機存取的效能上遠比LinkedList來得好.
然而,同樣使用get()來取 ArrayList 及 LinkedList的物件,在 LinkedList 方面必須由開始到結束的
節點走訪一遍,而使用 ArrayList則可隨意的指定某一個節點並取得其內容.
在存取方面, ArrayList 的確優於LinkedList,但在新增及刪除方面則相反..
以下有個binarySearch 的範例:
import java.util.*;
public class ListDemo1 {
static final int N = 10000;
static List values;
// make List of increasing Integer values
static {
Integer vals[] = new Integer[N];
Random rn = new Random();
for (int i = 0, currval = 0; i < N; i++) {
vals[i] = new Integer(currval);
currval += rn.nextInt(100) + 1;
}
values = Arrays.asList(vals);
}
// iterate across a list and look up every
// value in the list using binary search
static long timeList(List lst) {
long start = System.currentTimeMillis();
for (int i = 0; i < N; i++) {
// look up a value in the list
// using binary search
int indx = Collections.binarySearch(
lst, values.get(i));
// sanity check for result
// of binary search
if (indx != i) {
System.out.println(
"*** error ***\n");
}
}
return System.currentTimeMillis() - start;
}
public static void main(String args[]) {
// do lookups in an ArrayList
System.out.println("time for ArrayList = " +
timeList(new ArrayList(values)));
// do lookups in a LinkedList
System.out.println(
"time for LinkedList = " +
timeList(new LinkedList(values)));
}
}
執行結果:
time for ArrayList = 31
time for LinkedList = 4640
兩者間的效率差了相當多.
