Java的Collection.toArray有两个重载方法: 从集合转换成数组
Object[] toArray()
<T> T[] toArray(T[] a)
Object[] toArray()
此方法返回的Object[],是不能被强制转换为子元素类型的
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("2020");
list.add("good");
list.add("good");
list.add("study");
list.add("day");
list.add("day");
list.add("up");
Object[] obj = list.toArray();
System.out.println(Arrays.toString(obj)); // [2020, good, good, study, day, day, up]
String[] str=(String[])list.toArray(); // java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
System.out.println(Arrays.toString(str));
//通常的做法是
String[] strArr=new String[list.size()];
String[] array = list.toArray(strArr);
System.out.println(Arrays.toString(array));// [2020, good, good, study, day, day, up]
}
<T> T[] toArray(T[] a)
返回包含此list中所有元素的数组,返回的数组的类型(str)和指定数组(s)的类型相同必须相同。
//指定的数组(s)容量小于list数组的容量,也会返回一个与list大小相同的数组,指定数组容量大于等于0都可以。
String[] s = new String[0];
String[] str = list.toArray(s);
System.out.println(Arrays.toString(str));// [2020, good, good, study, day, day, up]
//如果指定数组(s1)的容量大于了list中元素的容量,有剩余空间,那么数组中紧接着list尾部的那些元素会被设置为null
String[] s1 = new String[10];
String[] str1 = list.toArray(s1);
System.out.println(Arrays.toString(str1));// [2020, good, good, study, day, day, up, null, null, null]
ArrayList.toArray()
源码