数据结构预备知识-----Java集合框架、List接口、包装类、装箱拆箱和泛型

文章目录

Java集合框架

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

以下是Java集合框架结构图:

List接口

在集合框架中,List是一个接口,继承自Collection。Collection 和 Iterable 都是接口

List接口中的常见方法

站在数据结构的角度来看,List就是一个线性表,即n个具有相同类型元素的有限序列,在该序列上可以执行增删改查以及变量等操作

线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列...
  线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储

【注意】 List 是一个接口,所以不能直接实例化 List 对象,ArrayList 、 LinkedList 和 Stack 都实现了 List 接口,
所以如果实例化 ArrayList 、 LinkedList 或 Stack 对象,可以使用 List接口 接收。示例代码如下:

java 复制代码
List<Integer> arrayList = new ArrayList<>();
List<Integer> linkedList = new LinkedList<>();
List<Integer> stack = new Stack<>();

数据结构

数据结构(Data Structure)是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合。

包装类 和 装箱、拆箱

包装类

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

基本数据类型和对应的包装类除了 Integer 和 Character, 其余基本类型的包装类都是首字母大写。

装箱/拆箱

装箱(装包):

1.自动装箱

java 复制代码
public static void main1(String[] args) {
    int i = 10;
    Integer a = i;//自动装箱
    Integer b = Integer.valueOf(99);//显式装箱
}
 2.显式装箱
java 复制代码
public static void main2(String[] args) {
    Integer i = 100;
    int a = i;//自动拆箱
    int aa = i.intValue();//显式拆箱
    double b = i.doubleValue();
}

面试题

以下代码输出结果是什么,为什么?

java 复制代码
public static void main(String[] args) {
    Integer a = 100;
    Integer b = 100;
    System.out.println(a == b);
    Integer aa = 200;
    Integer bb = 200;
    System.out.println(aa == bb);
}

输出 true false

a b aa bb 这四个数据都是引用类型,通过"=="比较引用类型,其实比较的是它们的地址,那么出现了false 就说明有地址不一样,那么这四个数据地址怎么得到的呢?

我们发现a b aa bb 都发生了装箱,我们就可以看看装箱是怎么具体实现的,装箱会调用一个 valueOf 的方法,在这个方法里面,会判断被装箱的简单数据类型i,是不是在-127~128 的区间里,如果在这个区间,就会在缓存数组里面返回相应下标元素的地址,而我们在这个区间范围内传入两个相同的值,那么返回的地址也是相同的,输出的结果就是true;如果不在这个区间,就会创建一个新的对象,而我们在这个区间范围之外传入两个相同的值,此时会创建两个新的对象返回,这时的地址就会不同,输出结果就是false


泛型

这里只是简单介绍一下泛型,后序会补上 关于泛型 的详细笔记

泛型通俗来讲就是适用于许多许多类型

但是,泛型的主要目是:指定当前的容器,要持有什么类型的对象。让编译

器去做检查

<>里面必须是引用类型,不能是简单类型

泛型语法

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

泛型的使用

java 复制代码
List<Integer> list = new ArrayList<Integer>();

当编译器可以根据上下文推导出类型实参时,可以省略类型实参的填写

java 复制代码
List<Integer> list = new ArrayList<>(); // 可以推导出实例化需要的类型实参为 Integer

相关推荐
桦说编程26 分钟前
CompletableFuture 超时功能有大坑!使用不当直接生产事故!
java·性能优化·函数式编程·并发编程
@_@哆啦A梦28 分钟前
Redis 基础命令
java·数据库·redis
Fhd-学习笔记31 分钟前
《大语言模型》综述学习笔记
笔记·学习·语言模型
努力学习java的哈吉米大王38 分钟前
数据结构-队列
数据结构
萌の鱼1 小时前
leetcode 2080. 区间内查询数字的频率
数据结构·c++·算法·leetcode
字节全栈_rJF1 小时前
性能测试 —— Tomcat监控与调优:status页监控_tomcat 自带监控
java·tomcat
简知圈2 小时前
【04-自己画P封装,并添加已有3D封装】
笔记·stm32·单片机·学习·pcb工艺
YxVoyager2 小时前
GAMES101学习笔记(五):Texture 纹理(纹理映射、重心坐标、纹理贴图)
笔记·学习·图形渲染
徐某人..2 小时前
ARM嵌入式学习--第十天(UART)
arm开发·单片机·学习·arm
爱编程的小新☆3 小时前
Java篇之继承
java·开发语言