数据结构前置知识-集合框架与泛型

集合框架

Java 集合框架 Java Collection Framework ,又被称为容器 container ,是定义在 java.util 包下的一组接口 interfaces和其实现类 classes 。
其主要表现为将多个元素 element 置于一个单元中,用于对这些元素进行快速、便捷的存储 store 、检索 retrieve
管理 manipulate ,即平时我们俗称的增删查改 CRUD 。

![[Pasted image 20240817090152.png]]
每个容器其实都是对某种特定数据结构的封装
![[Pasted image 20240817090424.png]]

包装类

在Java中,由于基本类型不是继承自Object,为了在泛型代码中可以支持基本类型,Java给每个基本类型都对应了
一个包装类型。

![[Pasted image 20240817090732.png]]

int i = 10;

// 装箱操作,新建一个 Integer 类型对象,将 i 的值放入对象的某个属性中

Integer ii = Integer.valueOf(i);

Integer ij = new Integer(i);

// 拆箱操作,将 Integer 对象中的值取出,放到一个基本数据类型中
int j = ii.intValue();~~~

~~~JAVA
int i = 10;

Integer ii = i; // 自动装箱

Integer ij = (Integer)i; // 自动装箱

int j = ii; // 自动拆箱

int k = (int)ii; // 自动拆箱

IntegerCache
![[Pasted image 20240817095255.png]]

  • 会判断传入的int值是否在IntegerCache 的最高值127和最低值-128之间,如果在这个之间,就会从IntegerCache 的缓存中获取Integer对象,否则就会new一个新的Integer对象。

泛型

一般的类和方法,只能使用具体的类型: 要么是基本类型,要么是自定义的类。如果要编写可以应用于多种类型的代码,这种刻板的限制对代码的束缚就会很大。
----- 来源《Java编程思想》对泛型的介绍。
泛型是在JDK1.5引入的新的语法,通俗讲,泛型:就是适用于许多许多类型。从代码上讲,就是对类型实现了参数

  • 把类型参数化,意味着可以传指定类型的参数
  • 所以,泛型的主要目的:就是指定当前的容器,要持有什么类型的对象。让编译器去做检查。此时,就需要把类型,作为参数传递。需要什么类型,就传入什么类型。
class 泛型类名称<类型形参列表> {

// 这里可以使用类型参数

}

class ClassName<T1, T2, ..., Tn> {

}
class 泛型类名称<类型形参列表> extends 继承类/* 这里可以使用类型参数 */ {

// 这里可以使用类型参数

}

class ClassName<T1, T2, ..., Tn> extends ParentClass<T1> {

// 可以只使用部分类型参数

}~~~
~~~java
class MyArray<T> {

public T[] array = (T[])new Object[10];//是否就足够好,答案是未必的

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<>();//类型后加入 <Integer> 指定当前类型

myArray.setVal(0,10);

myArray.setVal(1,12);

int ret = myArray.getPos(1);//不需要进行强制类型转换

System.out.println(ret);

myArray.setVal(2,"bit");//代码编译报错,编译器会在存放元素的时候帮助我们进行类型检查。

}

}~~~

### 泛型类的使用
#### 语法
~~~java
泛型类<类型实参> 变量名; // 定义一个泛型类引用

new 泛型类<类型实参>(构造方法实参); // 实例化一个泛型类对象
MyArray<Integer> list = new MyArray<Integer>();
  • 注意:泛型只能接受类,所有的基本数据类型必须使用包装类!
MyArray<Integer> list = new MyArray<>(); // 可以推导出实例化需要的类型实参为 Integer
  • 泛型是将数据类型参数化,进行传递
  • 泛型目前为止的优点:数据类型参数化,编译时自动进行类型检查和转换
  • 使用 表示当前类是一个泛型类

泛型类是如何进行编译的

![[Pasted image 20240817114501.png]]
![[Pasted image 20240817114534.png]]
![[Pasted image 20240817114611.png]]

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值