Collection的公有方法中,toArray()是比较重要的一个。 但是使用无参数的toArray()有一个缺点,就是转换后的数组类型是Object[]。 虽然Object数组也不是不能用,但当你真的想用一个具体类型的数组,比如String[]时,问题就来了。而把Object[]给cast成String[]还是很麻烦的,需要用到这个: String[] stringArray = Arrays.copyOf(objectArray, objectArray.length, String[].class); 不管是从哪方面看还是一开始就弄成String[]比较好。 具体怎么办呢?其实用带参数的toArray就好了。官方是这样给出的例子: String[] a = c.toArray(new String[0]); 像 toArray 方法一样,此方法充当了基于数组的 API 与基于 collection 的 API 之间的桥梁。更进一步说,此方法允许在输出数组的运行时类型上进行精确控制,并且在某些情况下,可以用来节省分配开销。 假定 l 是只包含字符串的一个已知 List。以下代码用来将该列表转储到一个新分配的 String 数组: String[] x = (String[]) v.toArray(new String[0]); 注意,toArray(new Object[0]) 和 toArray() 在功能上是相同的。 <T> T[] toArray(T[] a); 泛型 会返回你一个list长度的String 类型的数组 需要一个T[] a,new String[0]相当于开辟了一个长度为0的String[],并且指定了泛型。这样函数的调用是将list转换了一个String的数组。 这里的用new String[0]只是为了指定函数的形参数,最终返回的String[]的长度是由你的list存储内容的长度决定了。 new String[0]就是起一个模板的作用,指定了返回数组的类型,0是为了节省空间,因为它只是为了说明返回的类型 ArrayList.toArray()需要返回String [] “串对象数组” 类型, 要求调用参数也必须是 “串对象数组”, new String[] 就是生生一个“串对象数组”,[0]表示元素个数为零。 只是 一个类型标示,用来告诉toArray方法具体转化成什么类型。 list.toArray(new String[0]);//转化成String数组 list.toArray(new int[0]);//转化成int数组 --------------------- 作者:defineshan 来源:CSDN 原文:https://blog.csdn.net/defineshan/article/details/52763637 版权声明:本文为博主原创文章,转载请附上博文链接!
亲测个人例子:
String [] recipients = {"11311@qq.com"}; List<String> ccList = new ArrayList(Arrays.asList(recipients)); // 设置测试阶段抄送人员 ccList.add("123@qq.com"); ccList.add("345@qq.com"); ccList.add("456@qq.com"); ccList.add("999@qq.com"); recipients = ccList.toArray(new String[0]); for (int i = 0; i < recipients.length; i++) { System.out.println("args = [" + recipients[i] + "]"); }