官方JDK6文档给出的解释
对于这两种重载的不同方法,由于参数不同,则返回的类型也是不同
使用
- 第一个方法返回的是一个Object[]类,这个类也是继承自Object类,因此他和String[]是同级的关系,不能进行转换为String[]类型,也没有对应的方法。
Set<Object> set1 = new HashSet<>();
set1.add(1);
set1.add(2);
set1.add(3);
set1.add(4);
Integer[] set1_array = set1.toArray();//java: 不兼容的类型: java.lang.Object[]无法转换为java.lang.String[]
同样,我们可以利用迭代器对此Object[]类进行遍历,由于传入集合中的为Integer类型,因此每个数据也为Integer类型,如下程序:
Set<Object> set1 = new HashSet<>();
set1.add(1);
set1.add(2);
set1.add(3);
set1.add(4);
Object[] set1_array = set1.toArray();
for(Object a: set1_array){
System.out.println(a.getClass().getName()+ "数据为" + a);
}
//java.lang.Integer数据为1
//java.lang.Integer数据为2
//java.lang.Integer数据为3
//java.lang.Integer数据为4
因此可以发现Object[]为一个单独的类
如果我们要转换其中的内容为其他类型可以通过遍历进行转换,例如下面程序:
Set<Object> set1 = new HashSet<>();
set1.add(1);
set1.add(2);
set1.add(3);
set1.add(4);
Object[] set1_array = set1.toArray();
for(Object a: set1_array){
String b = a.toString();
System.out.println(b.getClass().getName()+ "数据为" + b);
}
/*java.lang.String数据为1
java.lang.String数据为2
java.lang.String数据为3
java.lang.String数据为4*/
- 第二个方法的使用即可以将集合set转换为对应类型的数组
如下程序所示:
Set<Integer> set1 = new HashSet<>();
set1.add(1);
set1.add(2);
set1.add(3);
set1.add(4);
Integer[] set1_array = set1.toArray(new Integer[0]);
for(Integer a: set1_array){
System.out.println(a.getClass().getName()+ "数据为" + a);
}
/*
* java.lang.Integer数据为1
java.lang.Integer数据为2
java.lang.Integer数据为3
java.lang.Integer数据为4
*/
c利用第二种重载方法,即可将set数组转换为指定格式的数组