arraylist是集合的一種實現,實現了介面list,list介面繼承了collection介面。collection是所有集合類的父類。arraylist使用非常廣泛,不論是資料庫表查詢,excel匯入解析,還是**資料爬取都需要使用到,了解arraylist原理及使用方法顯得非常重要。
那麼arraylist是怎麼初始化的?
private int index=0; //表示當前有0個,或者要插入的元素位址
private t data = (t) new object[10]; //t表示為泛型
這裡我們進行初始化,初始大小為10,經過閱讀原始碼private static final int default_capacity = 10;我們發現他的初始值為10,所以這裡我們也設定為10。
然後我們來實現增加資料的方法,這個時候我們需要考慮到arraylist的拓容機制,那麼它又是怎麼拓容的呢?
擴容規則為「陣列當前足夠的最小容量 + (陣列當前足夠的最小容量 / 2)」,即陣列當前足夠的最小容量 * 1.5,當然有最大值的限制。
故我們的增加資料的方法為:
/*** 執行緒不安全
* 超出索引 怎麼解決?拓容
* @param add
*/public void add(t add) else {
this.index--;
for(int i=index;i本次重寫arraylist,只是粗些,我們進行簡單入門還是可以的。
手寫ArrayList集合
最近仔細的研究了下集合框架的原始碼,並完全手寫下來,這裡將每一步的進展記錄下來,歡迎指點。arraylist的構造器,分別為無參構造器 傳入初始大小的有參構造器 傳入乙個集合型別的有參構造器,這裡只介紹前面兩種常用的構造器。無參構造器 arraylist的底層實際就是使用陣列來實現的,我們建立乙個陣...
純手寫ArrayList集合 二
在閱讀arraylist的jdk原始碼的時候,你經常會看到這兩個系統函式 arrays.copyof elementdata,size 而這個方法的原始碼是 public static t copyof t original,int newlength public static t copyof ...
手寫基本容器 ArrayList(一)
arraylist的地層是用陣列來進行搭建的,所以我們可以先用陣列來搭建底層,我們需要乙個變數來計算陣列的大小 然後在乙個乙個的往裡面新增自己需要的方法 為了定義預設的陣列大小 private static final int default size 10 一種是有參構造器,另一種是無參構造器,在...