当前位置: 首页 > article >正文

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


文章目录

  • 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接口 接收。示例代码如下:

List<Integer> arrayList = new ArrayList<>();
List<Integer> linkedList = new LinkedList<>();
List<Integer> stack = new Stack<>();

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

包装类 和 装箱、拆箱

包装类
  在Java中,由于基本类型不是继承自Object,为了在泛型代码中可以支持基本类型,Java给每个基本类型都对应了一个包装类型。基本数据类型对应的包装类如下:
在这里插入图片描述
基本数据类型和对应的包装类除了 Integer 和 Character, 其余基本类型的包装类都是首字母大写。

装箱/拆箱
装箱(装包):
1.自动装箱

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

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

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
在这里插入图片描述


泛型

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

 泛型通俗来讲就是适用于许多许多类型
但是,泛型的主要目是:指定当前的容器,要持有什么类型的对象。让编译
器去做检查
在这里插入图片描述
<>里面必须是引用类型,不能是简单类型

泛型语法

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

泛型的使用

List<Integer> list = new ArrayList<Integer>();

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

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

在这里插入图片描述



http://www.kler.cn/a/369409.html

相关文章:

  • Qt 文本文件读写与保存
  • 10.28Python_数据结构_栈和链表
  • 【AIGC】从CoT到BoT:AGI推理能力提升24%的技术变革如何驱动ChatGPT未来发展
  • linux指令笔记
  • 【数据结构与算法】《Java 算法宝典:探秘从排序到回溯的奇妙世界》
  • 亿家旺生鲜云订单零售系统的设计与实现小程序ssm+论文源码调试讲解
  • Linux 中的编译器 GCC 的编译原理和使用详解
  • 租房市场新动力:基于Spring Boot的管理系统
  • TS 基础
  • 【专用名词的离线语音识别在2024年底的解决方法调查-会议签到的补充】
  • 编译,链接。
  • 大数据之实时数据同步方案
  • 香橙派Orangepi 5pro 配置Hailo-8/Hailo-8L
  • 自建html首页
  • 分享electron多窗口实践
  • 使用 NLP 和模式匹配检测、评估和编辑日志中的个人身份信息 - 第 2 部分
  • WPF入门_06资源和样式
  • 在Guided模式下给无人机发送命令设置位置速度
  • 1553B总线电缆网络测试及数据分析设备
  • Linux iptables基本使用
  • RHCE 第二次作业
  • Aloudata BIG 主动元数据平台支持 Oracle/DB2 存储过程算子级血缘解析
  • Django 获取用户IP
  • #Swift The difference between Parameter and Agrument
  • 第十八届联合国世界旅游组织/亚太旅游协会旅游趋势与展望大会在广西桂林开幕
  • 智慧工地:建筑热潮退去后的挑战与应对策略