Java的Collection.toArray有两个重载方法:
Object[] toArray()
<T> T[] toArray(T[] a)
第一个方法就不说了,分析一下第二个重载方法
<T> T[] toArray(T[] a)
用法:
Collection<String> coll = new ArrayList<>();
// coll.add...
String[] strs = new String[10];
coll.toArray(strs);
String[] strs2 = coll.toArray(strs);
- 该方法返回包含此coll中所有元素的数组,返回的数组的运行时类型和指定数组的类型相同。
- 如果,指定的数组能够容纳该coll,则用coll填充该数组,并返回该数组;
- 否则,返回一个具有指定数组的运行时类型和此coll大小的新数组。
- 如果指定的数组能够容纳coll,并有剩余空间,那么数组中紧接着coll尾部的那个元素会被设置为null
代码示例
public class ToArrayTest {
/** 自定义类型A,保存着id */
static class A {
int id;
A(int id) { this.id = id; }
@Override
public String toString() {
return Integer.toString(id);
}
}
public static void main(String[] args) {
Collection<A> coll = new ArrayList<>();
coll.add(new A(1));
coll.add(new A(3));
coll.add(new A(5));
coll.add(new A(7));
// 使用 new A[0] 来确定类型
A[] as1 = coll.toArray(new A[0]);
A[] as2 = new A[6];
Arrays.fill(as2, new A(999));
A[] as3 = coll.toArray(as2);
System.out.println(Arrays.toString(as1));
System.out.println(Arrays.toString(as2));
System.out.println(Arrays.toString(as3));
}
}
输出
[1, 3, 5, 7]
[1, 3, 5, 7, null, 999]
[1, 3, 5, 7, null, 999]