Java - 数据结构之 顺序表与链表

本文详细介绍了Java中线性表的概念,包括顺序表与链表的特性。顺序表如ArrayList,提供了动态扩容功能,而链表如LinkedList在插入和删除操作上更具优势。文章还探讨了链表的不同结构以及ArrayList与LinkedList的优缺点,并通过实例解析了链表的常见算法题,如找中间节点、反转链表等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1. 线性表

2. 顺序表 

2.1 动态扩容

2.2 带参数的构造方法、

 ​编辑

2.3 ArrayList 一些常用的方法

3. 链表

3.1 链表的不同结构 

 3.2 LinkedList相对于ArrayList的优缺点详解

4. 链表OJ题详解

❓什么是回文❓ 

找出中间结点

反转链表

前后遍历链表

 总代码


1. 线性表

✍线性表是最基本、最简单、也是最常用的一种数据结构。线性表是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列。线性表就像是用一根绳子将我们的数据串起来存储到我们的内存中,并且线性表有且仅有一个开始结点和终端结点,开始结点没有前驱元素的且只有一个后驱元素,终端结点没有后驱元素且只有一个前驱元素,其他的结点有且只有一个前驱元素和后驱元素。

线性表以顺序存储的结构就叫顺序表

线性表以链式存储的结构就叫链表

在java当中 ArrayList 这个类实现了动态类型的顺序表,LinkedList 这个类实现了链表,他们都继承与 List 

2. 顺序表 

✍顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序存储的线性表通常称为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。 

顺序表的每个元素在存储的地址是连续的,如果有一个整型数组,那每个元素之间的地址都相差4

2.1 动态扩容

数组是一个静态的顺序表,当我们创建一个数组时,给定一个大小,那么这个数组的大小时不能更改的了,例如我们定义一个可以存放十个整型的大小

如果你已经存放了十个元素,当你想要继续存储第十一个元素的时候必须要重新创建一个大小为11的数组,将原来的数组放入到新数组内然后对新数组进行添加元素

👀而我们的 ArrayList 是一个动态类型的顺序表,他可以进行动态的扩容 ,当我们的顺序表内元素放满后,如果想要添加新的元素他会动态扩容至原来大小的 1.5 倍

接下来让我们来看看他的底层是如何进行扩容的

首先我们创建一个 ArrayList 对象

当一个类实例化的一个对象后,那么他肯定是要调用他的构造方法的,我们先来看看他的构造方法

先来看看不带参数的构造方法

看到这俩个参数 elementData   DEFAULTCAPACITY_EMPTY_ELEMENTDATA 后一脸懵逼,这俩是啥❓❓

先来看看 elementData 

是一个Object 类型的数组,我们存放的元素就在这个数组当中。

 再来看看 DEFAULTCAPACITY_EMPTY_ELEMENTDATA  

 

 DEFAULTCAPACITY_EMPTY_ELEMENTDATA  也是一个数组,指向的对象 {} 内没有任何东西,此时并没有给 elementData 分配内存。

❓问题来了,如果 elementData 并没有给他初始化大小那我们怎么放元素进去呢,或者说放元素进去会发生什么

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值