ArrayList中的toArray方法

2019-05-30  本文已影响0人  __0123

1. toArray();

List test = new ArrayList<>();

for (int i =0; i <10; i++) {

test .add(i);

}

Integer[] res = (Integer[]) test .toArray();

因为返回的是Object类型数组,所以此处会报错 [Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer。

若想转为Integer数组,则可以用以下方式:

Object[] testArrays = test.toArray();

Integer[] res =new Integer[test.length];

for (int i =0; i < test.length; i++) {

res[i] = (Integer) test[i];

}

此时就不如使用ArrayList中的toArray(T[]  a)方法(后面总结)。

 toArray()方法源码:

public Object[] toArray() {

return Arrays.copyOf(elementData, size);

}

2. toArray(T[]  a);

1)

Integer[] integers =new Integer[5];

Integer[] res = test .toArray(integers);

因为此时传入的数组长度小于ArrayList的长度,所以将会直接返回复制ArrayList元素的一个Integer类型数组,不对传入的integers数组操作。

2)

Integer[] integers =new Integer[10];

Integer[] res = test .toArray(integers);

当数组长度大于等于ArrayList的长度时,会将ArrayList的中元素值复制到integers数组中,最终返回的是先前传入的integers数组。

T[]toArray(T[] a)的源码如下:

public 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;

}

上一篇下一篇

猜你喜欢

热点阅读