日期:2014-05-20  浏览次数:20726 次

关于List接口的toArray()这个方法,求教大虾
我想把list   转成数组
ADTO[]   result   =   (ADTO[])list.toArray(new   ADTO[5]);
我发现toArray方法的参数无论写new   ADTO[5]还是写new   ADTO[4],或new   ADTO[2],或new   ADTO[0]结果都一样的。这是为什么呢?下面是具体的代码:


import   java.util.ArrayList;
import   java.util.List;

public   class   HelloWorld{

public   static   void   main(String[]   args){
HelloWorld   h   =   new   HelloWorld();
h.exercise();
}

private   int   exercise(){
List   list   =   createList();
for(int   i=0;i <10;i++){
ADTO   aDTO   =   new   ADTO();
aDTO.setName(String.valueOf(i+ "fuck "));
list.add(aDTO);
}

ADTO[]   result   =   (ADTO[])list.toArray(new   ADTO[0]);
for(int   i=0;i <result.length;i++){
System.out.println(result[i].getName());
}
return   0;

}

private   List   createList(){
return   new   ArrayList();
}
}

class   ADTO{
private   String   name;

public   String   getName()   {
return   name;
}

public   void   setName(String   name)   {
this.name   =   name;
}
}

另外toArray的另一种重载方式toArray(),里面不用些任何参数,这种用法我一直没有试出来。



------解决方案--------------------
问题1:toArray方法的参数无论写new ADTO[5]还是写new ADTO[4],他会先找新new的数组是否满足toArray转换后的长度。如果太小,则重新分配个大小合适的;如果太大,则多余部份都为null;

问题2:那种不还参数的toArray()是list转成Object[]的数组,所以只能用Object中的方法了。