首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

JDK ArrayList 源碼筆記:擴容機制、Fail-Fast 與子列表視圖

     編輯:Java 綜合教學

JDK ArrayList 核心實現解析

繼承體系

  • AbstractCollection:提供集合最大實現,子類必須實現 size() 和 iterator()。
  • AbstractList:提供順序表最大實現,子類需實現 get(int index),迭代器依賴它。

Fail-Fast 機制

  • 集合維護 modCount 記錄修改次數,迭代器維護 expectedModCount。
  • 迭代操作前比較兩者,不等則拋出 ConcurrentModificationException。
  • modCount 用 volatile 修飾,保證多線程可見性。
  • 只要有 modCount 即線程不安全,建議使用迭代器而非直接操作。

ArrayList 關鍵特性

  1. 初始容量 10: 構造器和 addAll 為深拷貝(調用 Arrays.copyOf → System.arraycopy)。
  2. trimToSize(): 清理多餘空間,節省內存;實際長度由數組 length 決定,非 size。
  3. 擴容策略: 默認增大 1.5 倍,考慮 int 溢出與 JVM 最大內存,ensureCapacity 統一入口。
  4. toArray/clone 為深拷貝。
  5. 內部數組無泛型: 獲取元素時才轉型。
  6. 動態操作用數組拷貝: 非傳統數據結構的元素移動,而是 System.arraycopy。
  7. 置 null 助 GC: 刪除元素後將對應位置設為 null,便於垃圾回收。
  8. 私有快速方法: 如 fastRemove(index) 跳過二次比較。
  9. subList 返回視圖: 淺拷貝,直接操作原集合。

原文鏈接:https://blog.zswlib.com/2016/10/26/jdk%e9%a1%ba%e5%ba%8f%e8%a1%a8%e7%ac%94%e8%ae%b0/

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved