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

相关推荐
星河梦瑾33 分钟前
SpringBoot相关漏洞学习资料
java·经验分享·spring boot·安全
黄名富37 分钟前
Redis 附加功能(二)— 自动过期、流水线与事务及Lua脚本
java·数据库·redis·lua
love静思冥想38 分钟前
JMeter 使用详解
java·jmeter
言、雲41 分钟前
从tryLock()源码来出发,解析Redisson的重试机制和看门狗机制
java·开发语言·数据库
1nullptr43 分钟前
三次翻转实现数组元素的旋转
数据结构
OopspoO1 小时前
qcow2镜像大小压缩
学习·性能优化
TT哇1 小时前
【数据结构练习题】链表与LinkedList
java·数据结构·链表
A懿轩A1 小时前
C/C++ 数据结构与算法【栈和队列】 栈+队列详细解析【日常学习,考研必备】带图+详细代码
c语言·数据结构·c++·学习·考研·算法·栈和队列
Yvemil71 小时前
《开启微服务之旅:Spring Boot 从入门到实践》(三)
java
Anna。。1 小时前
Java入门2-idea 第五章:IO流(java.io包中)
java·开发语言·intellij-idea