證明我看了原始碼系列 ArrayList

2021-09-24 22:20:59 字數 2426 閱讀 7085

list是collection的乙個子介面,它表示物件的乙個有序列表,意味著可以順序訪問,也可以通過索引(index)訪問。可以向list中多次新增重複的元素。arraylist是list的乙個具體實現類,通過動態陣列的方式來實現。

private static final int default_capacity = 10;    //預設陣列容量為10

transient object elementdata;    //

private int size;    //arraylist的元素數量

1.private static final object empty_elementdata = {};    //物件陣列構造,「真實」的空陣列

2.private static final object defaultcapacity_empty_elementdata = {};    //「虛假」的空陣列:大小為預設容量

3.public arraylist(int initialcapacity)    //帶參構造方法,引數是給定的初始陣列容量

public arraylist(int initialcapacity)  else if (initialcapacity == 0)  else 

}

關鍵點:如果給定的初始陣列容量為0,使用arraylist提供的方法建立物件陣列。如果大於0,直接例項乙個物件陣列。

4.public arraylist()

public arraylist()
關鍵點:如果不給定初始容量值,arraylist會生成乙個預設的物件陣列defaultcapacity_empty_elementdata,結合3.2理解。

5.private void grow(int mincapacity)     //arraylist動態增長

private void grow(int mincapacity)
關鍵點:newcapacity = oldcapacity + (oldcapacity >> 1),可見陣列動態增長後的長度與原陣列長度有關。

6.public boolean add(e e)     //新增元素

public boolean add(e e) 

private void ensurecapacityinternal(int mincapacity)

private void ensureexplicitcapacity(int mincapacity)

關鍵點:參見3.5,可見當arraylist陣列已滿再加入元素,觸發grow()方法。

7.public void trimtosize()

public void trimtosize() 

}

關鍵點:參見3.4、3.5,在arraylist陣列觸發grow()方法後,陣列的長度比包含元素數量大,用於刪除動態增長後多餘的陣列容量。

eg:

arraylist al = new arraylist(10);

for(int i=0;i<10;i++) //斷點1

al.add(1); //斷點2

al.trimtosize(); //斷點3

}

斷點1:

斷點2:

斷點3:

8.public int indexof(object o)     //根據元素查索引下標

public int indexof(object o)  else 

return -1;

}public boolean contains(object o)

public int lastindexof(object o) else

return -1;

}

關鍵點:可見是通過陣列遍歷找元素,lastindexof()是逆序遍歷,contains()是通過indexof()來判斷是否存在。

vue原始碼之Array

目錄 響應式具體實現 陣列子集和新增元素的追蹤 array中的問題 object通過setter改變屬性的值,所以我們利用getter時傳送依賴收集,在setter時觸發依賴更新,而且vue將資料轉換成響應式資料是在資料初始化時,對object中之後的屬性新增和刪除操作,無法做到自動更新,而是通過v...

HashMap原始碼系列

為了提高自己的 水平和除錯水平 主要還是面試會問 想哭 逼著自己看了主要集合框架的原始碼 這裡主要是hashmap 當然整個過程也是辛苦的 我們都知道集合的本質是資料結構 博主為了看懂它真的是下足了功夫 我的方法是 測試特殊的例子 idea的debug很強大 可以通過它看看 是否會根據自己所想的那樣...

精品Android原始碼推薦,看了絕不後悔

從零開始android遊戲程式設計 五子棋原始碼 read rss on ophone 俄羅斯方塊 空戰遊戲1945 加速感測器演示 演示如何使用location和google map 寶典 連連看策略遊戲 回到戰國 android源 滾屏動作遊戲 太空保衛戰 android源 冒險遊戲 勝利大逃亡...