ArrayList源码学习之toArray方法

先看一个无参数版的实现

public Object[] toArray() {
        return Arrays.copyOf(elementData, size);
    }

这个没什么特别的,直接调用Arrays的copyOf方法返回了一个ArrayList内部elementsData数组的复制数组。
再看下面这个重载方法

public <T> T[] toArray(T[] a) {
        if (a.length < size)
            // Make a new array of a's runtime type, but my contents:
            return (T[]) Arrays.copyOf(elementData, size, a.getClass());
        System.arraycopy(elementData, 0, a, 0, size);
        if (a.length > size)
            a[size] = null;
        return a;
    }

从这个方法看出,我们需要传入一个T对象数组a,如果传入数组的长度小于arraylist的size,直接返回一个elementsData的复制数组,并已经完成了强制类型转换,如果数组a长度大于arrayList的size,并不改变a的length,而是直接将对应大小的数组copy到a中,然后直接简单粗暴的令a[size]=null。。。
测试如下:

    public static void main(String[] args) {  
        
        ArrayList<Integer> a = new ArrayList<Integer>();
        a.add(10);
        a.add(11);
        a.add(12);
        Integer[] array = new Integer[] {1,2,3,4,5,6,7} ;
        array = a.toArray(array);
        for(Integer i : array) {
            System.out.println(i);
        }
    }

输出

10
11
12
null
5
6
7

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容