美文网首页
ArrayList源码学习之toArray方法

ArrayList源码学习之toArray方法

作者: zsdvvb | 来源:发表于2018-03-16 00:09 被阅读0次

    先看一个无参数版的实现

    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
    
    

    相关文章

      网友评论

          本文标题:ArrayList源码学习之toArray方法

          本文链接:https://www.haomeiwen.com/subject/qcnkqftx.html