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);
    }

 

未完待续……

 

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