List转数组toArray⽅法⼀、Array⽅法
List提供了⼀个将List转为数组的⼀个⾮常⽅便的⽅法toArray。toArray有两个重载的⽅法:
Object[]toArray()
返回按适当顺序包含列表中的所有元素的数组(从第⼀个元素到最后⼀个元素)。
object to<T> T[]toArray(T[] a)
返回按适当顺序(从第⼀个元素到最后⼀个元素)包含列表中所有元素的数组;返回数组的运⾏时类型是指定数组的运⾏时类型。
第⼀种重载⽅法,是将list直接转为Object[] 数组,并不是数组的原类型;
第⼆种⽅法是将list转化为你所需要类型的数组,当然我们⽤的时候会转化为与list内容相同的类型。
⼆、toArray编程规则
(1) Object[] toArray()⽅法
List list = new ArrayList();
list.add(new Student());
list.add(new Student());
list.add(new Student());
Student[] s = (Student[]) Array();
运⾏程序会抛出异常:java.lang.ClassCastException
(2)T[] toArray(T[] a)⽅法 如果a数组的长度⼩于原数组的长度,则重新分配空间复制并返回,否则使⽤a数组复制并返回
List list = new ArrayList();
list.add(new Student());
list.add(new Student());
list.add(new Student());
Student[] student = (Student[]) Array(new Student[0]);
运⾏结果正确
三、ArrayList toArray⽅法源码
(1)Object[] toArray()⽅法
public Object[] toArray() {
pyOf(elementData, size);
}
Arrays类copyOf⽅法
public static <T> T[] copyOf(T[] original, int newLength) {
return (T[]) copyOf(original, newLength, Class());
}
public static <T,U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType) { //判断类型是否为Object[]类型
T[] copy = ((Object)newType == (Object)Object[].class)
//Object[]类型实例化
(T[]) new Object[newLength]
//⾮Object[]类型实例化
: (T[]) ComponentType(), newLength);
//复制数组
System.arraycopy(original, 0, copy, 0, Math.min(original.length, newLength));
return copy;
}
(2) T[] toArray(T[] a)⽅法
public <T> T[] toArray(T[] a) {
/
/传⼊的数组长度⼩于实际数组长度重新分配空间并复制数组
if (a.length < size)
// Make a new array of a's runtime type, but my contents:
return (T[]) pyOf(elementData, size, a.getClass());
//复制数组
System.arraycopy(elementData, 0, a, 0, size);
//旧数组长度作为索引,指向新数组的空间赋值为null
if (a.length > size)
a[size] = null;
return a;
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论