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

相关推荐
小魏冬琅8 分钟前
探索面向对象的高级特性与设计模式(2/5)
java·开发语言
就爱敲代码13 分钟前
怎么理解ES6 Proxy
1024程序员节
憧憬一下13 分钟前
input子系统的框架和重要数据结构详解
arm开发·嵌入式·c/c++·1024程序员节·linux驱动开发
TT哇22 分钟前
【Java】数组的定义与使用
java·开发语言·笔记
三日看尽长安花23 分钟前
【Tableau】
1024程序员节
look_outs40 分钟前
JavaSE笔记2】面向对象
java·开发语言
sswithyou42 分钟前
Linux的调度算法
1024程序员节
武子康44 分钟前
大数据-191 Elasticsearch - ES 集群模式 配置启动 规划调优
java·大数据·elk·elasticsearch·搜索引擎·全文检索
武子康1 小时前
大数据-187 Elasticsearch - ELK 家族 Logstash Filter 插件 使用详解
大数据·数据结构·elk·elasticsearch·搜索引擎·全文检索·1024程序员节
互联网杂货铺1 小时前
Python测试框架—pytest详解
自动化测试·软件测试·python·测试工具·测试用例·pytest·1024程序员节