泛型集合
概念:参数化类型,类型安全的集合,强制集合元素的类型必须一致
特点:
编译时即可检查,而非运行时抛出异常
访问时,不必类型转换(拆箱)
不同泛型之间引用不能相互赋值,泛型不存在多态
总结:如果未使用泛型,泛型类型将会默认为Object类型,如果添加元素的时候既有字符串类型,又有整数类型,这个时候编译的时候不会报错,后面对这个集合进行遍历的时候如果是将Object类型的元素强制转换为字符串类型,但是因为整数类型不能转换为String类型,就会报错,即运行时抛出异常
如以下代码未使用泛型,默认为Object类型
public class Test1 {
public static void main(String[] args) {
ArrayList arrayList = new ArrayList();
arrayList.add("你好");
arrayList.add("太好了");
arrayList.add(22);
arrayList.add(33);
for(Object s:arrayList){
String s1 = (String) s;
System.out.println(s1);
}
}
}
运行结果报错:java.lang.Integer cannot be cast to java.lang.String
代码实现泛型集合的应用
public class Test {
public static void main(String[] args) {
Student s1 = new Student("学生一", 22);
Student s2 = new Student("学生二", 25);
Student s3 = new Student("学生三", 29);
ArrayList<Student> students = new ArrayList<>();
//向集合中添加指定泛型类型的元素
students.add(s1);
students.add(s2);
students.add(s3);
System.out.println(students.toString());
//遍历
//for遍历
System.out.println("===============for循环===============");
for (int i = 0; i < students.size(); i++) {
System.out.println(students.get(i));
}
System.out.println("=============增强for循环===============");
for(Student s:students){
System.out.println(s);
}
//迭代器遍历
System.out.println("=============迭代器===============");
Iterator<Student> iterator = students.iterator();
while (iterator.hasNext()){
Student next = iterator.next();
System.out.println(next);
}
}
}