1. 程式人生 > >關於LinkedList

關於LinkedList

1.LinkedList的本質是雙向連結串列

2.LinkedList包含兩個重要的成員:header 和 size。   header是雙向連結串列的表頭,它是雙向連結串列節點所對應的類Entry的例項。Entry中包含成員變數: previous, next, element。其中,previous是該節點的上一個節點,next是該節點的下一個節點,element是該節點所包含的值。   size是雙向連結串列中節點的個數。

3.LinkedList實際上是通過雙向連結串列去實現的。既然是雙向連結串列,那麼它的順序訪問會非常高效,而隨機訪問效率比較低。     既然LinkedList是通過雙向連結串列的,但是它也實現了List介面{也就是說,它實現了get(int location)、remove(int location)等“根據索引值

來獲取、刪除節點的函式”}。LinkedList是如何實現List的這些介面的,如何將“雙向連結串列和索引值聯絡起來的”?     實際原理非常簡單,它就是通過一個計數索引值來實現的。例如,當我們呼叫get(int location)時,首先會比較“location”和“雙向連結串列長度的1/2”;若前者大,則從連結串列頭開始往後查詢,直到location位置;否則,從連結串列末尾開始先前查詢,直到location位置。    這就是“雙線連結串列和索引值聯絡起來”的方法

4.關於遍歷的效率

iteratorLinkedListThruIterator:8 ms
iteratorLinkedListThruForeach:3724 ms
iteratorThroughFor2:5 ms
iteratorThroughPollFirst:8 ms
iteratorThroughPollLast:6 ms
iteratorThroughRemoveFirst:2 ms
iteratorThroughRemoveLast:2 ms

由此可見,遍歷LinkedList時,使用removeFist()或removeLast()效率最高。但用它們遍歷時,會刪除原始資料;若單純只讀取,而不刪除,應該使用第3種遍歷方式。無論如何,千萬不要通過隨機訪問去遍歷LinkedList