package chapter6;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class ListToArray {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("zero");
list.add("one");
list.add("two");
list.add("three");
list.add("four");
list.add("five");
Object[] array = list.toArray();
String[] array1 = new String[4];
list.toArray(array1);
System.out.println(Arrays.asList(array1));
String[] array2 = new String[8];
list.toArray(array2);
System.out.println(Arrays.asList(array2));
String[] array3 = new String[list.size()];
list.toArray(array3);
System.out.println(Arrays.asList(array3));
}
}
二话不说先试一下代码
从List源码中分析两个list.Toarry()有何不同
Object[] toArray();
一览无遗直接将返回将List返回Object数组。。。
<T> T[] toArray(T[] a);
这个就比较牛逼了,运用到了泛型,在底层定义了一个泛型方法将返回了一个约束类型的数组,如果传入的数组长度大于集合长度超出范围为null,如果小于长度则全部元素为null.
如果不懂请参考源码:
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;
}
其中三种长度状态的数组执行时间是不一样的,但是不论怎样当数组长度等于集合大小时,速度永远是最快的。