ArrayList源码学习笔记(3)

    技术2022-07-11  85

    经过前面的源码阅读,现在可以开始尝试自己实现一个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); }

     

    未完待续……

     

    Processed: 0.016, SQL: 9