Java图书管理系统练习程序(四)
本部分主要介绍List的基本操作与Java中泛型的使用。
一、Java中泛型的使用
泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可称之为类型参数),然后在使用/调用时传入具体的类型(类型实参)。
泛型的本质是为了参数化类型(在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型)。也就是说在泛型使用过程中,操作的数据类型被指定为一个参数,这种参数可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。
例1.编写一个类,将任意一个整数(int)按下面格式输出,“我是一个数:100”。
那么这个类很好写,如下
public class OutNumber {
private int n;
public OutNumber(int n){
this.n=n;
}
public void printN(){
System.out.println("我是一个数 :"+n);
}
}
那么接下来,我们要再写一个类,将一个字符串(String)也要按以下的格式输出,那么这个类也很简单,代码如下:
public class OutSting {
private String n;
public OutSting(String n){
this.n=n;
}
public void printN(){
System.out.println("我是一个数:"+n);
}
}
仔细分析以上两个类,我们发现,这两个类对数据处理的方法是相同的,只是处理的类型是不同的。如果我们可以写一个类,定义类时,并不指明数据的类型,在使用的时候再指明类型。那么我们可以采用以下的方式。
public class OutNumber {
private E n;
public OutNumber(E n){
this.n=n;
}
public void printN(){
System.out.println("我是一个数:"+n);
}
}
public class Demo1 {
public static void main(String[] args) {
OutNumber o1=new OutNumber<>(10);
o1.printN();
OutNumber o12=new OutNumber<>("字符串 ");
o12.printN();
}
}
这就是泛型的一种使用,称为泛型类
1.泛型类
class 类名称 {
private 泛型标识 成员变量名;
......
}
注意:
泛型的类型参数只能是类类型(包括自定义类),不能是简单类型(比如int与Integer)
传入的实参类型需与泛型的类型参数类型相同,
如OutNumber o1=new OutNumber<>(10);
2.泛型接口
其使用方法与泛型类基本相同。
在本练习程序中,主要使用了泛型类和泛型接口。
二、List的基本操作
在本练习程序中,如果采用数组存放若干个用户的信息,在声明数组时,就必须同时声明数组的长度,即我们的程序只能存储多少个用户,如果我们声明的过大,会造成内存的浪费,如果我们声明的数组太小,即长度过短,会造成数据溢出的错误。
而List可以解决这个问题。它的大小是动态可改变的,其存储的数据类型也是多样的。例如以下代码
List lists=new ArrayList<>();
在以上代码中,List是一个接口,ArrayList是该接口的一个实现类。通过以上代码,我们即创建一个存储Student对象的集合。
1.向集合中添加、删除元素
Student student=new Student(1,"张三丰","武当山");
lists.add(student);//将student对象添加到集合中
lists.remove(student);//将student对象从集合中移除
2.判断List中是否包含某个元素
lists.contains(student)
3.根据元素在集合中的索引值取得元素
Student stu=lists.get(0);
4.取得对象在集合中的索引值
lists.indexOf(student);
5.判断集合是否为空
lists.isEmpty();
以上是在本练习程序中,用到的有关List集合的相关内容。其它的方法,可以参考Java API文档。