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;
}
网友评论