数据结构预备知识-----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

相关推荐
十月的皮皮1 天前
C语言学习笔记20260606- 求月份天数三种写法
c语言·笔记·学习
cmes_love1 天前
Level 2逐笔成交历史数据下载方法笔记
数据库·笔记·oracle
马士兵教育1 天前
Java还有前景吗?Java+AI大模型学习路线及项目?
java·人工智能·python·学习·机器学习
想要成为糕糕手1 天前
前端必修课:JavaScript 数组与数据结构底层逻辑全解析
javascript·数据结构·面试
snow@li1 天前
Java:理解 Gradle / 后端项目的管家 / 打包SpringBoot 应用 / 完成编译、下载依赖、运行测试、打包 JAR/WAR / 速查表
java
Cloud_Shy6181 天前
解读《Effective Python 3rd Edition》:从练气到老魔(第五章 Item 30 - 32)
开发语言·人工智能·笔记·python·学习方法
云烟成雨TD1 天前
Spring AI 1.x 系列【57】动态工具发现:Tool Search Tool
java·人工智能·spring
zfoo-framework1 天前
[修改代码使用]codex官方app中使用中转(不需要cc-switch) 1.config.toml 2.sk方式登录
java
lizhihai_991 天前
股市学习心得-AI 产业链核心标的梳理清单
大数据·服务器·人工智能·科技·学习
问心无愧05131 天前
ctf show web入门110
前端·笔记