版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
# 从一个错误说起
ArrayList<String> list=new ArrayList<String>();
String strings[]=(String [])list.toArray();
编译报错,觉得很迷惑,因为有如下2个类似的方法
JDK5中已经有了对范型的支持,这样可以保证在集合和Map中的数据类型的安全,可是,List的toArray方法返回的竟然是Object []让人很迷惑。个人感觉应该可以根据范型,直接返回相应的T []。
public Object[] toArray();
这个方法把List中的全部元素返回一个相同大小的数组,数组中的所有元素都为Object类型。
public <T> T[] toArray(T[] a);
这个方法把List中的全部元素返回一个相同大小的数组,数组中的所有元素都为T类型。
注意:为什么不能根据范型,直接返回相应的T []? 因为不能向下转型
最终,List转换为数组,应该如下
List<String> list=new ArrayList<>();
list.add("zheng");
list.add("ze");
list.add("zhou");
String[] strarray= new String[list.size()]; //最重要,不能遗漏,预先申请好数组空间
list.toArray(strarray);
for (int i=0; i<strarray.length; i++) {
System.out.println(strarray[i]);
}
数组转换为List, Arrays.asList
而且int[]数组转换要注意,必须声明为Integer[]数组
Integer[] nums = {4,7,1,9}; //这里如果写为int[] 下面那句就报错了
List<Integer> ls = Arrays.asList(nums);