具體的方法實現只會過一下,不足處歡迎小夥伴批評指出。
大家都知道arraylist是個動態陣列具體用到會實現擴容,下面我會圍繞這個來簡單講一下
1.繼承、介面
abstractlist // 對list的行為一些具體的實現,不過arraylist 基本重寫了
list //標準list的約定方法
randomaccess //這個純粹就是底層演算法的一種判斷能力,別聽網上瞎說,其實表示的是從下標1拿資料和下標99拿資料一樣快
cloneable //複製能力 這個了解深淺拷貝的同學就會知道
serializable //序列化嘍
2.基本變數
private static final int default_capacity = 10; //初始化大小
transient object elementdata;//儲存元素的陣列
private int size;//元素的大小, 這裡指的實際儲存大小
3.方法
//新增元素
public boolean add(e e) {
ensurecapacityinternal(size + 1); //這個比較有趣 其實是動態新增陣列的 一系列操作,最核心的,新增的元素不滿足陣列長度就動態擴容
elementdata[size++] = e;
return true;
//陣列擴容
private void grow(int mincapacity) {
// overflow-conscious code
int oldcapacity = elementdata.length;
int newcapacity = oldcapacity + (oldcapacity >> 1);
if (newcapacity - mincapacity < 0)
newcapacity = mincapacity;
if (newcapacity - max_array_size > 0)
newcapacity = hugecapacity(mincapacity);
// mincapacity is usually close to size, so this is a win:
elementdata = arrays.copyof(elementdata, newcapacity);
別的方法沒啥可講 看看就明白
4.子類
itr //內部私有類 實現iterator 介面 這個就是大家常用的迭代器的具體實現,講到迭代器就扯一下設計模式中的迭代器模式,總體來說就是操作迭代,和儲存的集合分離,以方便修改替換,這裡用子類來實現的,也就是我們設計中常說的,物件組合而不是繼承。
listitr //內部私有類 集合itr 實現iterator 相當於樓上的擴充套件
sublist //內部私有類 繼承abstractlist 實現randomaccess 其實好雞肋,他相當於乙個檢視,就是通過sublist方法返回的的物件操作的方法等同於操作原物件
//這個就是裡面的具體方法
public void add(int index, e e) {
rangecheckforadd(index);
checkforcomodification();
parent.add(parentoffset + index, e); //這裡的parent就是呼叫時傳過來的
this.modcount = parent.modcount;
this.size++;
arraylistspliterator // 內部私有類 實現spliterator 這個就吊了哦, 這是平行計算的
具體的可以看這個 就不剽竊了
ArrayList原始碼解析和設計思路
當第乙個元素新增的時候,陣列會擴容到預設容量default capacity 10 三種初始化方式 無參初始化 指定大小初始化 指定初始資料初始化 private static final object defaultcapacity empty elementdata public arrayli...
ArrayList原始碼分析
arraylist是平時使用很多的乙個類,趁有時間,我也閱讀以下原始碼,以幫助自己加深理解。類的層次結構這裡就不列出了,主要分析一下原始碼部分,屬性部分 protected transient int modcount 0 這個屬性是從abstractlist繼承過來的,每次arraylist進行結...
ArrayList原始碼剖析
建構函式 有3個建構函式 1 在jdk原始碼中arraylist無參的建構函式,預設初始化大小是10 2 帶有指定大小引數的建構函式 3 帶有集合引數的建構函式 一 確定arrarlist的容量 1 若arraylist的容量不足以容納當前的全部元素,設定新的容量 原始容量 3 2 1。2 如果擴容...