Collection接口有15种方法,这里先总结一个toArray( )方法。
toArray( ) 方法分为有参和无参两种,它们的返回值都是一个包含集合对象的所有元素的数组。
无参方法的机制:
将集合对象的元素全部转换为数组元素,并返回这个数组
有参方法的机制:
如果有带参数,那么参数也必须是一个数组;
如果参数数组的长度与集合元素的长度相等,则将集合元素存入参数数组,并返回同样的数组;
如果参数数组的长度小于集合的元素数量,则忽略此参数;并返回集合转换后的数组
如果参数数组的长度大于集合的元素数量,则在保存数组后,多余的数组元素的值都为NULL,并返回集合转换后的数组
下面写2个程序,辨析这两种情况的差别:
先看无参的:
//引入类包
import java.util.List;
import java.util.ArrayList;
public class testCollection{
public static void main(String[] args){
//声明并创建ArrayList对象list5,实现List接口
List<String> list5 = new ArrayList<String>();
//依次添加元素
list5.add("a");
list5.add("b");
list5.add("c");
list5.add("d");
list5.add("e");
//使用toArray的无参方法,将列表的元素组成的数组赋值给Object数组oo
Object[] oo = list5.toArray();
//使用2种循环,遍历数组oo
for(int i=0;i<oo.length;i++)
System.out.print(oo[i]+" ");
for(Object o:oo)
System.out.print(o+" ");
System.out.println();
}
}
编译输出,结果如下:
再看一下有参方法
//引入相关的包
import java.util.List;
import java.util.ArrayList;
public class testCollection{
public static void main(String[] args){
//创建ArrayList实例list5,实现List接口
List<String> list5 = new ArrayList<String>();
//添加元素
list5.add("a");
list5.add("b");
list5.add("c");
list5.add("d");
list5.add("e");
//分别测试数组长度不足,正好,和多一个的情况下,toArray有参方法的运行机制
Object[] test1 = new Object[list5.size()-1];
Object[] test2 = new Object[list5.size()];
Object[] test3 = new Object[list5.size()+1];
//数组长度少1个的情况
Object[] oo1 = list5.toArray(test1);
for(Object o:oo1)
System.out.print(o+" ");
System.out.println();
for(Object t:test1)
System.out.print(t+" ");
System.out.println();
//数组长度正好的情况
Object[] oo2 = list5.toArray(test2);
for(Object o:oo2)
System.out.print(o+" ");
System.out.println();
for(Object t:test2)
System.out.print(t+" ");
System.out.println();
//数组长度多1个的情况
Object[] oo3 = list5.toArray(test3);
for(Object o:oo3)
System.out.print(o+" ");
System.out.println();
for(Object t:test3)
System.out.print(t+" ");
System.out.println();
}
}
编译运行
可见,如果数组长度少,参数就没有意义;如果数组长度正好,参数会被赋值;如果数组长度多了,那么多余的元素就是NULL