目录
此篇文章需要用到以下内容:
什么是泛型
泛型,顾名思义,泛指一切类型。
泛型的定义
泛型的定义十分简单,在类后面加 <>。
public class _04<K> {
}
其中<>内可以字符作为变量用来代指需要替换为泛型的数据结构的数据定义形式。
public class _04<K> {
private K[] arr;
}
泛型的优势
下面以一个例子引出泛型的优势。
利用程序实现计算机中栈的模拟。
保证数据先进后出就是栈,需要写两个方法,一个方法负责入栈,一个方法负责出栈,由此就可以实现栈的运行模拟。
定义一个数组,一个游标,数组负责模拟内存,游标负责模拟地址指针,利用构造器传参构造可以控制大小的“栈”。
private int[] arr;
private int i=-1;
public _04(int size){
arr=new int[size];
}
入栈方法
public void add(int value){
i++;
arr[i]=value;
}
出栈方法
public int get(){
return arr[i--];
}
到此,基本完成了栈的模拟。
但是,引出一个问题:栈内不能存储别的类型的数据,比如string类型,只能存储int类型的数据,这对于真实的栈来说,太假。
现在需要考虑把数组的类型换成string,重写一个属于string类型的栈模拟程序,这样可以解决问题。但是如果每一个数据类型都需要写一个栈,这么做时间复杂度高且代码很冗余。
由此,引出泛型,下面用泛型解决此问题。
初始定义
在构造器中,采用了object创建一个object类型的数组,然后进行强制类型转化成K型,object是所有类的父类,因此可以这么用。
private K[] arr;
private int i=-1;
public _04(int size){
arr=(K[])new Object[size];
}
入栈方法
public void add(K value){
i++;
arr[i]=value;
}
出栈方法
public K get(){
return arr[i--];
}
测试
public static void main(String[] args) {
_04 test_01=new _04(10);
test_01.add(1);
test_01.add(2);
test_01.add(3);
System.out.println(test_01.get());
System.out.println(test_01.get());
System.out.println(test_01.get());
_04 test_02=new _04(10);
test_02.add("字符串1");
test_02.add("字符串2");
test_02.add("字符串3");
System.out.println(test_02.get());
System.out.println(test_02.get());
System.out.println(test_02.get());
}
程序输出:
由此,可以看出泛型具有巨大的优势,可以丰富代码功能,将提高工作效率。