ArrayList:
ArrayList 使用默認無參數構造函數,底層的Object數組長度默認爲10,當長度不夠用自動增長0.5倍
源代碼:
默認長度10
- /**
- * Default initial capacity.
- */
- private static final int DEFAULT_CAPACITY = 10;
如果數組長度不夠增長0.5倍grow方法
- int newCapacity = oldCapacity + (oldCapacity >> 1);
ArrayList爲什麼查詢快,增刪慢?
查詢快:
因爲數組的內存地址排列是連續的,可以很快找到比如 list.get(100); 第一個元素內存地址是0x98,那麼內存地址加100就找到了。
增刪慢:
增:
我們假設這個數組長度容量爲7,現在要再添加一個元素它會怎麼做呢?
增加元素時,先檢測數組長度是否夠用,如果底層Object數組長度不夠,增加0.5倍的長度,形成一個新的Object數組,並將之前的數組元素copy到新的數組裏面。
刪:
刪除慢:當刪除裏面的其中一個數據時,後面的數據要全部移動一個位置。
LinkedList:
使用鏈表數據結構實現,特點,增刪快,查詢慢。
查詢慢:元素之前內存地址不連續,只能挨個挨個遍歷查找
增加:
插入數據時,只需要改變內存地址的指向;
將和它有關係的內存地址指向刪除掉,沒人指向它,它就成爲了垃圾對象。