ArrayList源碼學習筆記(3)

經過前面的源碼閱讀,現在可以開始嘗試自己實現一個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);
    }

 

未完待續……

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章