黑马程序员技术交流社区
标题:
集合转化数组过程中的一个疑问
[打印本页]
作者:
乔九
时间:
2013-2-23 23:13
标题:
集合转化数组过程中的一个疑问
package com.itheima;
import java.util.*;
public class Toarray {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList<String>al=new ArrayList<String>();
al.add("njsajdfsjkl");
al.add("hjskdnf");
String[]s=al.toArray(new String[0]);
此处中括号中的0代表什么意思是在初始化字符数组的长度吗
System.out.println(al);
}
}
作者:
王钊
时间:
2013-2-24 00:36
首先,从api文档可知,ArrayList有两个toArray方法,
一个不带参数toArray(),一个带参数<T> T[] toArray(T[] a)
这道题显然调用的是带参数的那个,
问题就是为什么可以传入一个new String[0]
文档说明是这样的:按适当顺序(从第一个到最后一个元素)返回包含此列表中所有元素的数组;返回数组的运行时类型是指定数组的运行时类型。如果指定的数组能容纳列表,则将该列表返回此处。否则,将分配一个具有指定数组的运行时类型和此列表大小的新数组。
如果指定的数组能容纳队列,并有剩余的空间(即数组的元素比队列多),那么会将数组中紧接 collection 尾部的元素设置为 null。(仅 在调用者知道列表中不包含任何 null 元素时才能用此方法确定列表长度)。
由此可见,这个参数可以做两件事
1,确定返回的数组类型要和这个参数数组类型一致。
2,如果传进去的数组能容下集合,就返回这个参数数组,多出来的部分用null填补上,否则,返回一个和传入数组类型相同的新数组,新数组正好装下集合的所有元素。
我的测试代码:
public static void main(String[] args)
{
// TODO Auto-generated method stub
ArrayList<String> al = new ArrayList<String>();
al.add("njsajdfsjkl");
al.add("hjskdnf");
String[] s1 = al.toArray(new String[1]);
System.out.println(s1.length);//结果为2
for (String str : s1)
{
System.out.println(str);
}
System.out.println("-------------------------");
String[] s2 = al.toArray(new String[5]);
System.out.println(s2.length);//结果为5
for (String str : s2)
{
System.out.println(str);
}
}
复制代码
集合中有2个元素,传入new String[1]放不下集合元素,返回正好等于集合长度的新数组,
传入new String[5],就返回这个长度为5数组,数组后3个元素用null补足。
作者:
王钊
时间:
2013-2-24 17:03
没有其他人回答吗
作者:
胥文
时间:
2013-2-24 17:22
你说的已经很好了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2