經過前面的源碼閱讀,現在可以開始嘗試自己實現一個ArrayList了,並對比自己的實現方式與JDK的有什麼不同。
1、實現List接口
首先代碼實現List接口,這時候我才發現原來List接口裏有這麼多的方法需要實現……
2、增加存儲數組
ArrayList的數據最終是存放在一個數組中。
這裏立馬出現了一個問題:
既然ArrayList<T>是泛型,爲什麼不存儲泛型指定的類型數組,而是Object數組呢?
回答:這個是java對於泛型的使用上有一些約束。如果直接創建T[]數組,會報錯,因爲編譯器會進行類型擦除,並不能知道這個T類型是什麼。所以乾脆創建Object[]數組。(這個參考自https://zhuanlan.zhihu.com/p/77500314)
但是ArrayList的get方法並沒有做強制轉換,如下所示(應該是編譯器有特殊處理,參考自https://blog.csdn.net/u011951979/article/details/77089815?utm_source=blogxgwz1)
public E get(int index) {
rangeCheck(index);
// 這裏elementData是Object[],取出來的類型應該是Object對象,但是沒有做強制轉換,應該是編譯器做了特殊處理了。
return elementData(index);
}
未完待續……