關於LinkedList
阿新 • • 發佈:2018-12-17
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