ArrayList類是Java和C#等程式語言中實現的動態數組結構,通過數組索引支持快速隨機訪問。其核心特性包括自動擴容機制(當容量不足時按比例擴展存儲空間)、允許存儲重複元素和null值,但插入或刪除非末尾元素時需要移動後續元素導致效率下降。在Java中屬於java.util包並實現List接口,而C#版本位於System.Collections命名空間且微軟建議新項目優先選用泛型List類。該類型支持泛型參數約束元素類型(Java需使用包裝類處理基本類型),提供add/get/remove等基礎操作方法。
基本介紹
- 所屬語言:Java/ C#
- 數據結構:動態數組
- 執行緒安全:默認非執行緒安全
- 默認容量:Java初始為10
- 時間複雜度:隨機訪問O(1)
- 建議替代:C#推薦List
實現機制
核心操作
- add(E e):末尾追加元素,Java平均時間複雜度O(1),需觸發擴容時產生O(n)開銷
- get(int index):通過索引直接訪問數組元素,時間複雜度O(1)
- remove(int index):刪除指定位置元素,需移動後續元素導致O(n)開銷
- set(int index,E e):替換指定索引元素,時間複雜度O(1)
- AddRange(ICollection):追加集合元素
- InsertRange(int index,ICollection):指定位置插入集合
- GetRange(int index,int count):獲取子集視圖
性能分析
泛型集合對比
套用場景
- 需要頻繁隨機讀取元素(如遊戲中的物體坐標列表)
- 數據總量變化頻繁但尾部操作占比高(如日誌快取佇列)
- 需要與基於數組的算法兼容(如數值計算模組)
- 高頻中間位置插入/刪除效率較低(應選用LinkedList)
- 嚴格記憶體約束環境(因存在未使用的預分配空間)
- 多執行緒並發修改(需自行實現同步機制)
