首先,先說明一下,linkedlist其實是乙個雙向鍊錶:
乙個linkedlist物件其實就是一系列linkedlistnode物件的集合。每乙個linkedlistnode物件都可以訪問下乙個和前乙個linkedlistnode物件,其值是通過value屬性訪問的。
現在,開始我們的效能比較:list類的效能優於linkedlist類。
增加 刪除
在list中增加、刪除節點的速度,大體上快於使用linkedlist時的相同操作。將 list.add方法和linkedlist的add*方法相比較,真正的效能差別不在於add操作,而在linkedlist在給gc(垃圾**機制)的壓力上。乙個list本質上是將其資料儲存在乙個堆疊的陣列上,而linkedlist是將其所有節點儲存在堆疊上(人家是乙個,我是一系列)。這就使得gc需要更多地管理堆疊上linkedlist的節點物件。注意,list.insert*方法比在linkedlist中使用add*方法在任何地方新增乙個節點可能要慢。然而,這個依賴於list插入物件的位置。insert方法必須使所有在插入點後面的元素往後移動一位。如果新元素被插在list最後或接近最後的位置,那麼相對於gc維護linkedlist節點的總的開銷來說,其開銷是可以被忽略的。
索引另乙個list效能優於linkedlist的地方是你在使用索引進行訪問的時候。在list中,你可以使用索引值(indexer)直接定位到某個具體的元素位置。而在linkedlist中,卻沒有這樣的奢侈品。在linkedlist中,你必須通過previous或next屬性遍歷整個list,直到找到你想要的節點。
搜尋 查詢
在搜尋某個元素或節點的時候,list的效能也優於linkedlist。相比於linkedlist的contains,find,和findlast方法,list.binarysearch方法在找元素方面更快。這次因為linkedlist使用的是線性查詢,而list使用的是binary search。簡單地說,binary search利用list中的元素已排過序,這需要在呼叫binarysearch方法之前先呼叫sort方法(請注意,如果有任何新的元素被新增進來,那麼sort方法必須被重新呼叫)。接下去的查詢就是binary search的演算法了,我就不再贅述了!
C 食譜 麵食 選單1 何時何地使用泛型
問題 你想在乙個新的專案中使用,或在現有的專案上把非泛型的型別轉換成它們的泛型表示。但是,你卻不知道自己為什麼想這樣做,並且你也不知道哪些非泛型型別應該被轉換成它們的泛型表示。解決方法 決定何時何地使用泛型,你需要考慮以下幾件事 l 你的型別將包含或者以多種不確定的資料型別來執行嗎?如果是這樣,那麼...
C STL學習筆記4 list
include include include include using namespace std int main 建構函式 string temp i love you vectortemp1 10,20 listtest1 建構函式 1 listtest2 10 建構函式2 listtes...
python 學習筆記4 list 列表
list 列表 陣列 array list 是有序的,list的定義以 為標識。如 list1 name1 name2 name3 元素可以是任何型別的,如字串 數字等等。元素可以重複。如 l2 1,2,test 1,2 計算機裡起始都是從0開始的,所以 list 的索引也是從 0 開始。索引也可以...