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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/wxid2798226/article/details/89226044

# 从一个错误说起


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

猜你喜欢

转载自blog.csdn.net/wxid2798226/article/details/89226044