ArrayList源码学习之toArray方法

2018-03-16  本文已影响0人  zsdvvb

先看一个无参数版的实现

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

上一篇下一篇

猜你喜欢

热点阅读