1. 泛型的理解和好处
-
使用传统方法的问题分析
- 不能对加入到集合 ArrayList 中的数据类型进行约束(不安全)
- 遍历的时候,需要进行类型转换,如果集合中的数据量较大,对效率有影响
-
泛型的好处
- 编译时,检查添加元素的类型,提高了安全性
- 减少了类型转换次数,提高效率
不使用泛型:Dog -> 加入 -> Object -> 取出 -> Dog // 放入到 ArrayList 会先转成 Object,在取出时,还需要转换成 Dog 使用泛型:Dog -> Dog -> Dog // 放入时,和取出时,不需要类型转换,提高效率 不再提示编译警告
2. 泛型介绍
int a = 10; 理解:泛(广泛)型(类型)=> Integer, String, Dog
- 泛型又称为参数化类型,是 JDK5.0 出现的新特性,解决数据类型的安全性问题
- 在类声明或实例化时只是指定好需要的具体的类型即可
- Java 泛型可以保证如果在编译时没有发出警告,运行时就不会产生 ClassCastException 异常。同时,代码更加简洁、健壮
- 泛型的作用:可以在类声明时通过一个标识表示类中的某个属性的类型,或者是某个方法的返回值类型,或者是参数类型
3. 泛型的语法
3.1. 泛型的声明
interface 接口{} 和 class 类<K,V>{} //比如:List,ArrayList
说明:
- 其中,T,K,V 不代表值,而是表示类型
- 任意字母都可以。常用 T 表示,是 Type 的缩写
3.2. 泛型的实例化
要在类名后面指定类型参数的值(类型)。如:
- List strList = new ArrayList();
- Iterator iterator = customers.iterator();
3.3. 泛型使用举例
import java.util.*;
public class GenericExercise {
public static void main(String[] args) {
Student student0 = new Student("小明", 18);
Student student1 = new Student("小刚", 18);
(, );
HashSet<Student> students = <>();
students.add( (, ));
students.add( (, ));
students.add( (, ));
(Student student : students) {
System.out.println(student);
}
System.out.println();
HashMap<String, Student> hm = <>();
hm.put(, (, ));
hm.put(, (, ));
hm.put(, (, ));
Set<Map.Entry<String, Student>> entries = hm.entrySet();
Iterator<Map.Entry<String, Student>> iterator = entries.iterator();
(iterator.hasNext()) {
Map.Entry<String, Student> entry = iterator.next();
System.out.println(entry.getKey() + + entry.getValue());
}
}
}
{
String name;
age;
{
.name = name;
.age = age;
}
String {
name;
}
{
.name = name;
}
{
age;
}
{
.age = age;
}
String {
+ + name + + + age + ;
}
}


