这篇继续学习Collection接口的方法,我们先学习集合转数组的方法。有时候我们拿到的数据类型是集合,我们想转换成数组,然后利用数组相关方法进行操作。下面我们就通过三段代码来练习转换数组的过程,注意第三段代码中的出现的父类不能调用子类的成员方法的问题。
1.集合转数组
package collection;
import java.util.ArrayList;
import java.util.Collection;
public class Demo2_Collection {
@SuppressWarnings({ "rawtypes", "unchecked" })
public static void main(String[] args) {
Collection c = new ArrayList();
c.add("abc");
c.add(100);
c.add(true);
c.add('y');
//集合转数组
Object[] arr = c.toArray();
for (inti = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
输出:
abc
100
true
y
现在来演示自定义对象在集合中转换数组的过程,还是需要借助前面文章介绍的Student类。
package collection;
import java.util.ArrayList;
import java.util.Collection;
public class Demo2_Collection {
@SuppressWarnings({ "rawtypes", "unchecked" })
public static void main(String[] args) {
Collection c = new ArrayList();
c.add(new Student("张三",23));
c.add(new Student("李四",24));
c.add(new Student("王五",25));
c.add(new Student("刘六",26));
c.add(new Student("小七",27));
//集合转数组
Object[] arr = c.toArray();
for (inti = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
输出:
Student [name=张三, age=23]
Student [name=李四, age=24]
Student [name=王五, age=25]
Student [name=刘六, age=26]
Student [name=小七, age=27]
上面输出的是name和age,如果我只需要拿到name如何办?我们在Student这个类是有一个getName()方法的,下面我们改变下,看看能不能拿到name。
package collection;
import java.util.ArrayList;
import java.util.Collection;
public class Demo2_Collection {
@SuppressWarnings({ "rawtypes", "unchecked" })
publicstaticvoid main(String[] args) {
Collection c = new ArrayList();
c.add(new Student("张三",23));
c.add(new Student("李四",24));
c.add(new Student("王五",25));
c.add(new Student("刘六",26));
c.add(new Student("小七",27));
//集合转数组
Object[] arr = c.toArray();
for (inti = 0; i < arr.length; i++) {
// 发现下面直接使用getName会报错,为什么
// 因为我们数组对象是Object类,并不是Student类,而Object类是没有getName方法
// 如果要使用getName方法,我们需要向下转型
//System.out.println(arr[i].getName());
System.out.println(((Student)arr[i]).getName());
}
}
}
输出
张三
李四
王五
刘六
小七
注意看我代码中的注释,为什么需要向下转型。