LinkList 和 ArrayList 的快速區分

集合類 List 有倆個子類,ArrayList 和 LinkList 這倆者有什麼區別,其實看名字就能夠看出來,一個是用數組實現,一個是用鏈表實現數組

ArrayList

底層使用順序表示也就是數組實現 , 因此 List 具備數組的特性3d

難增刪

順序表示是如何實現增長或者刪除?cdn

找到須要增長或者刪除的位置 增長:把該位置後面的全部元素都向後移一位, 把要增長的元素放到其餘元素後移完後產生的空位中 刪除:把該位置後面的元素都前移一位blog

因此

數組的增長和刪除很麻煩,對於最後一位的增長或者刪除只有 O (1) 的複雜度it

可是在數組中間進行增長或者刪除則就須要 O (n-i) 因此數組增刪的複雜度近似 O (n)io

易定位

因爲數組的定位是基於下標,因此很容易進行快速隨機訪問class

LinkList

使用的是雙向鏈表實現的 List, 具備鏈表的特性List

易增刪

鏈表是經過地址進行移動的,因此在刪除或者增長時候不牽扯到後移的問題,因此在增刪問題上,鏈表實現只須要用到 O (1) 的時間複雜度lazyload

難定位

一樣是由於鏈表是經過地址進行移動的,因此只能知道前面是誰或者後面是誰 (雙向鏈表), 想要知道第幾位只能一個個找,不能像數組那樣能進行快速隨機訪問gc

相關文章
相關標籤/搜索