Java™ 教程(List實現)

List實現

List實現分爲通用實現和專用實現。html

通用List實現

有兩種通用的List實現 — ArrayListLinkedList,在大多數狀況下,你可能會使用ArrayList,它提供了恆定時間的位置訪問,並且速度很快。它沒必要爲List中的每一個元素分配節點對象,而且當必須同時移動多個元素時,能夠利用System.arraycopy的優點,將ArrayList視爲Vector,而沒有同步開銷。java

若是你常常將元素添加到List的開頭或遍歷List以從其內部刪除元素,則應考慮使用LinkedList,這些操做在LinkedList中須要恆定時間和在ArrayList中須要線性時間。可是在性能付出了巨大的代價,位置訪問在LinkedList中須要線性時間和在ArrayList中須要恆定時間。此外,LinkedList的常數因子要差得多,若是你認爲要使用LinkedList,請在選擇以前同時使用LinkedListArrayList評估應用程序的性能,ArrayList一般更快。segmentfault

ArrayList有一個調整參數 — 初始容量,它是ArrayList增加以前能夠容納的元素數量,LinkedList沒有調整參數和七個可選操做,其中之一是clone,其餘六個是addFirstgetFirstremoveFirstaddLastgetLastremoveLastLinkedList還實現了Queue接口。api

專用List實現

CopyOnWriteArrayList是一個由寫時複製數組備份的List實現,此實現本質上相似於CopyOnWriteArraySet。即便在迭代過程當中也不須要同步,而且保證迭代器永遠不會拋出ConcurrentModificationException。此實現很是適合維護事件處理程序列表,在這些事件處理程序列表中更改不多,而且遍歷頻繁且可能很耗時。數組

若是須要同步,則Vector會比用Collections.synchronizedList同步的ArrayList快一些。可是Vector有不少遺留操做,所以請務必始終使用List接口操做Vector,不然之後將沒法替換實現。oracle

若是你的List大小固定 — 也就是說,你將永遠不會使用removeadd或除containsAll之外的任何批量操做 — 你確定有第三種選擇值得考慮,有關更多信息,請參見便利實現部分中的Arrays.asList性能


上一篇:Set實現

相關文章
相關標籤/搜索