集合框架
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]]