天天看点

Java中数组Array和List对象的相互转换

# 从一个错误说起

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);