【数据结构】泛型(分享重点)

什么是泛型?

泛型就是适用于许多许多类型,对类型参数化。

怎么创建一个泛型呢

class 泛型类名称<类型形参列表> {
// 这里可以使用类型参数
}
class ClassName<T1, T2, ..., Tn> {
}
class 泛型类名称<类型形参列表> extends 继承类/* 这里可以使用类型参数 */ {
// 这里可以使用类型参数
}
class ClassName<T1, T2, ..., Tn> extends ParentClass<T1> {
// 可以只使用部分类型参数
}

下面我们看两段代码的对比

class MyArray {
public Object[] array = new Object[10];
public Object getPos(int pos) {
return this.array[pos];
}
public void setVal(int pos,Object val) {
this.array[pos] = val;
}
}
public class TestDemo {
public static void main(String[] args) {
MyArray myArray = new MyArray();
myArray.setVal(0,10);
myArray.setVal(1,"hello");//字符串也可以存放
String ret = myArray.getPos(1);//编译报错
System.out.println(ret);
}
}

用泛型改写

class MyArray<T> {
public T[] array = (T[])new Object[10];//1
public T getPos(int pos) {
return this.array[pos];
}
public void setVal(int pos,T val) {
this.array[pos] = val;
}
}
public class TestDemo {
public static void main(String[] args) {
MyArray<Integer> myArray = new MyArray<>();//2
myArray.setVal(0,10);
myArray.setVal(1,12);
int ret = myArray.getPos(1);//3
System.out.println(ret);
myArray.setVal(2,"bit");//4
}
}
类名后的 <T> 代表占位符,表示当前类是一个泛型类
泛型类的使用
泛型类<类型实参> 变量名; // 定义一个泛型类引用
new 泛型类<类型实参>(构造方法实参); // 实例化一个泛型类对象

示例

MyArray<Integer> list = new MyArray<Integer>();

泛型只能接受类

泛型方法

方法限定符 <类型形参列表> 返回值类型 方法名称(形参列表) { ... }
public class Util {
//静态的泛型方法 需要在static后用<>声明泛型类型参数
public static <E> void swap(E[] array, int i, int j) {
E t = array[i];
array[i] = array[j];
array[j] = t;
}
}

通配符

? 用于在泛型的使用,即为通配符
例如, List<?> 表示一个可以容纳任何类型元素的列表。
public class TestDemo {
public static void main(String[] args) {
Message<Integer> message = new Message() ;
message.setMessage(55);
fun(message);
}
// 此时使用通配符"?"描述的是它可以接收任意类型,但是由于不确定类型,所以无法修改
public static void fun(Message<?> temp){
//temp.setMessage(100); 无法修改!
System.out.println(temp.getMessage());
}
}

相关推荐

  1. 数据结构】2.包装类&简单认识

    2024-04-15 06:30:05       40 阅读
  2. C# 分析

    2024-04-15 06:30:05       31 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-15 06:30:05       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-15 06:30:05       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-15 06:30:05       87 阅读
  4. Python语言-面向对象

    2024-04-15 06:30:05       96 阅读

热门阅读

  1. python课本基础练习——列表推导式

    2024-04-15 06:30:05       36 阅读
  2. 2024/4/12 网络编程day2

    2024-04-15 06:30:05       38 阅读
  3. 初识DOM

    初识DOM

    2024-04-15 06:30:05      38 阅读
  4. 双向冒泡算法(C语言版)

    2024-04-15 06:30:05       39 阅读
  5. Android之图片压缩几种方式

    2024-04-15 06:30:05       38 阅读
  6. Android之启动优化

    2024-04-15 06:30:05       39 阅读
  7. 链表linked list: 将新节点链接到链表的末尾

    2024-04-15 06:30:05       41 阅读
  8. 7天八股速记之C++后端——Day 1

    2024-04-15 06:30:05       34 阅读
  9. 创建一个flutter的左划重命名,右划隐藏的功能

    2024-04-15 06:30:05       38 阅读