一、整體對比
ArrayList :
- 存儲方式:底層是使用 Object[] 存儲的
- 插入和刪除的效率:插入和刪除元素的效率低
- 擴容機制:默認擴容至原來的 1.5 倍
- 線程安全:線程不安全(可以使用 Collections 的 synchronizedList 來保證線程安全)
Vector :(已經不用了)
- 存儲方式:底層是使用 Object[] 存儲
- 插入和刪除的效率:插入和刪除元素的效率低
- 擴容機制:默認擴容至原來的 2 倍
- 線程安全:線程安全
LinkedList
- 存儲方式:底層是使用雙向鏈表存儲的
- 插入和刪除的效率:插入和刪除元素的效率高
二、ArrayList 底層源碼分析
JDK 1.7 | JDK 1.8 | |
---|---|---|
空參構造器 | 創建了一個長度爲 10 的 Object 數組 | 創建了一個空的 Object 數組, 在第一次添加元素時才創建了一個長度爲 10 的 Object 數組 |
擴容 | 擴容至原來的 1.5 倍 | 擴容至原來的 1.5 倍 |
結論:
1、如果提前知道了要存儲的元素個數,就使用帶參的構造器來創建,可以提高效率;
2、JDK 8 中的創建方式可以避免造好了 ArrayList 後長時間沒有使用浪費內存。