前言
大家可能在使用ArrayList的过程中遇到过这样的需求:需要把ArrayList转化为对应的数组。例如:
ArrayList<String> arrayList=new ArrayList();
我们想把集合转化为元素为String类型的数组,可能会想到:arrayList的toArray()方法,然后通过:
String[] arrStr= (String[]) arrayList.toArray();
这时可能会抛出java.lang.ClassCastException的异常。下面来分析这个原因,以及解决方法。
分析
ArrayList的toArray()返回值类型为Object[]。把Object[]类型强转为String[],则会抛出“java.lang.ClassCastException”异常,因为Java不支持向下转型。
ArrayList提供了2个toArray()函数:
Object[] toArray()
<T> T[] toArray(T[] contents)
解决
通过以上分析,了解到我们可以使用toArray的带参数的方法:toArray(T[] contents)。
可以通过以下几种方式实现:
// toArray(T[] contents)调用方式一
public static Integer[] vectorToArray1(ArrayList<Integer> v) {
Integer[] newText = new Integer[v.size()];
v.toArray(newText);
return newText;
}
// toArray(T[] contents)调用方式二。最常用!
public static Integer[] vectorToArray2(ArrayList<Integer> v) {
Integer[] newText = (Integer[])v.toArray(new Integer[0]);
return newText;
}
// toArray(T[] contents)调用方式三
public static Integer[] vectorToArray3(ArrayList<Integer> v) {
Integer[] newText = new Integer[v.size()];
Integer[] newStrings = (Integer[])v.toArray(newText);
return newStrings;
}