ArrayList和LinkedList原理


ArrayList:

ArrayList 使用默認無參數構造函數,底層的Object數組長度默認爲10,當長度不夠用自動增長0.5倍

源代碼:

默認長度10

[java] view plain copy
  1. /** 
  2.  * Default initial capacity. 
  3.  */  
  4. private static final int DEFAULT_CAPACITY = 10;  


如果數組長度不夠增長0.5倍grow方法

[java] view plain copy
  1. int newCapacity = oldCapacity + (oldCapacity >> 1);  

ArrayList爲什麼查詢快,增刪慢?

查詢快:

因爲數組的內存地址排列是連續的,可以很快找到比如 list.get(100); 第一個元素內存地址是0x98,那麼內存地址加100就找到了

增刪慢:

增:

我們假設這個數組長度容量爲7,現在要再添加一個元素它會怎麼做呢?

增加元素時,先檢測數組長度是否夠用,如果底層Object數組長度不夠,增加0.5倍的長度,形成一個新的Object數組,並將之前的數組元素copy到新的數組裏面


刪:

 

刪除慢:當刪除裏面的其中一個數據時,後面的數據要全部移動一個位置。


LinkedList:

使用鏈表數據結構實現,特點,增刪快,查詢慢。

查詢慢:元素之前內存地址不連續,只能挨個挨個遍歷查找


增加:

插入數據時,只需要改變內存地址的指向;


將和它有關係的內存地址指向刪除掉,沒人指向它,它就成爲了垃圾對象

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章