泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。
在泛型集合中:
(1)泛型:指集合元素中的数据类型。
(2)泛型集合:规定了元素数据类型的集合。
利用泛型集合可以解决数据类型的安全性。
一、普通集合数据类型的不安全体现
有学生类:
public class Student {
String no; //学号
String name; //姓名
String phone; //电话
public Student()
{
;
}
public Student(String no,String name,String phone)
{
this.no = no;
this.name = name;
this.phone = phone;
}
//方法(行为)
public void SayHi()
{
System.out.println("大家好,我的学号:"+this.no+",我的姓名:"+this.name+",我的电话:"+this.phone);
}
}
在main方法中将多个学生添加到ArrayList集合,并且进行遍历打印信息。
Student stu1 = new Student("0001", "刘备", "13554545487");
Student stu2 = new Student("0002", "关羽", "13554545487");
Student stu3 = new Student("0003", "张飞", "13554545487");
list.add(stu1);
list.add(stu2);
list.add(stu3);
list.add("赵云");
//输出集合元素个数
System.out.println("集合中元素个数:"+list.size());
//通过循环遍历,打印学生信息
for (int i = 0; i < list.size(); i++) {
Student stu = (Student)list.get(i);
stu.SayHi();
}
此时,程序可以正常编译通过,但是在程序执行的时候会报错,因为无法将"赵云"字符串类型转换为学生类型。
二、List泛型集合解决数据类型安全问题
由于泛型集合需要指定元素的数据类型,所以泛型集合在程序编译的时候即可检测出语法错误。
有学生类:
public class Student {
String no; //学号
String name; //姓名
String phone; //电话
public Student()
{
;
}
public Student(String no,String name,String phone)
{
this.no = no;
this.name = name;
this.phone = phone;
}
//方法(行为)
public void SayHi()
{
System.out.println("大家好,我的学号:"+this.no+",我的姓名:"+this.name+",我的电话:"+this.phone);
}
}
在main方法中将多个学生添加到List泛型集合,并且进行遍历打印信息。
Student stu1 = new Student("0001", "刘备", "13554545487");
Student stu2 = new Student("0002", "关羽", "13554545487");
Student stu3 = new Student("0003", "张飞", "13554545487");
//将3个学生添加到Arraylist集合
ArrayList<Student> list = new ArrayList<Student>();
list.add(stu1);
list.add(stu2);
list.add(stu3);
list.add("赵云"); //此行代码编译会报错,因为无法将字符串添加到集合中,集合中只能添加学生。
//通过循环遍历,打印学生信息
for (int i = 0; i < list.size(); i++) {
Student stu = list.get(i);
stu.SayHi();
}
此程序在编译的时候就可以检查出错误,保障了数据类型安全。
说明:除了集合定义之外,List泛型集合用来操作集合的方法和List普通集合相同。
三、HashMap泛型集合
HashMap泛型集合需要指定两个类型,一个是键类型,一个是值类型。
如果需要使用HashMap泛型集合存储多个学生信息,其中学号是键,学生对象是值,语法如下:
HashMap<String, Student> myList = new HashMap<String, Student>();
说明:除了集合定义之外,HashMap泛型集合用来操作集合的方法和HashMap普通集合相同。