《java数据结构》--顺序表详解

news2024/9/20 6:37:12

一.顺序表的概念🙉

🐱顺序表是一段物理地址连续的储存单元,一次储存数据元素的线性结构。一般情况下采用数组储存,和数组的增删查改类似。

但是顺序表和数组还是有区别的比如,数组按照是否可以扩容可以分为,静态顺序表和动态顺序表。

静态顺序表,就是顺序表的储存容量是不变的;动态顺序表,就是当顺序表的容量满了的时候可以自动扩容。

二.顺序表的实现🐱

1.创建顺序表🐱

刚刚有提到顺序表的储存逻辑和数组差不多所以我们只需要在内部定义一个数组和记录容量大小的UsedSize即可。(为了之后方便使用这里使用的是泛型(传入什么类型就是什么类型),如果不理解泛型的这里可以直接把T当作int来看,不影响)

UsedSize:顺序表内实际存储的数据长度(不是顺序表内存大小)

6cc55270cb184920beb7ca529d8f59c2.png

2.判断顺序表是否为空🐱

因为后面会用到较多,所以我们先来写这个方法,其实顺序表内很多方法都很简单,比如下面这个

我们只需要判断顺序表中存储数据的数量是否和顺序表的内存大小是否相同即可

e776eb9d3fd44eca925ac2dafa99edd4.png

3.指定位置添加数据*🐱

在添加数据之前我们要先看一看,顺序表是否已经满了,如果满了就扩容(直接使用copyOf)。接下来开始添加,既然要指定位置添加数据那么原来的数据顺序肯定不能变而且被指定的位置肯定还要是可覆盖的,我们直接让那个位置以后的数据都向后移动一步就行,然后用要添加的数据直接覆盖掉那个位置就行。(指定的位置要合法)

0ac94025d4434a95b75200181c2408ac.png

4.检查范围🐱

检查传进来的位置是否合法,方便之后方法的实现

9215019bc36744deb79d3b294a9b6cee.png

5.删除数据🐱

这个方法也是十分的简单的呢!只需要检查一下位置是否合法,然后直接覆盖掉指定位置就行了。看是不是,辉常简单😉😉

29af127e6a61456a94ed1ebe506b3d00.png

6.查找指定数据🐱

只需要遍历顺序表一一对比就行然后返回下标

2a3f8dd55d3f4264bd89ac57c05546b1.png

7.删除第一次出现的数据🐱

要删除某个数据,我们就要先找到这个数据,这里直接使用我们刚刚实现的Find方法就可以了!找到之后直接删掉这个位置的数据就行,到这里我们的顺序表基本快实现完了,是不是感觉just so so

8b00bd54600243a894bb1172e68d85b1.png

8.获取长度和清空顺序表🐱

清空顺序表只需要将UsedSize置为0就好

ab28bee2486246719f8694e8694a6ee6.png

到这里我们的顺序表就实现完了,但是Java中的顺序表还有很多方法有兴趣的小伙伴可以自己去实现一下。

三.顺序表的使用🦊

顺序表的使用方法比较简单直接创建一个对象就行这里就不多做赘述了

我们来看一看Java中提供了顺序表的哪些方法

//这些方法大部分都很好理解,如果有兴趣的小伙伴可以自己试着实现一些😊,不过对于sublist这个方法你可能会有些疑问,截取部分list具体是怎么回事呢?

它的具体作用是返回一个顺序表,这个顺序表是原来的顺序表的一部分,具体的范围是[fromIndex,toIndex)下标位置的数据。我们来看一个例子

23ed9f52333e4e959d0c8fb10d0e55d5.png

4603c51e72034bc5845b166286a9dad7.png

//这里改了list 3,结果list 1也跟着改了,是因为,sublist方法,并不是返回一个新的数组,而是返回原来数组的sublist的方法的第一个参数下标处的地址也就是返回1下标处的地址,还是在对同一个数组操作

四.顺序表的打印🐭

顺序表的打印方法一般有一下几种:

1 sout,

2 for,

3 foreach

4迭代器

这里重点来聊聊迭代器(Integer)(具体内容我直接写在代码注释里了)

🙉到这里顺序表的内容就聊完了,如果你还有什么疑问🤔🧐或者不同的见解欢迎在下方评论或私信小编,最后也希望可以支持一下小编啦!!!🥰🥰

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1704351.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VTK 数据处理:几何操作

VTK 数据处理:几何操作 VTK 数据处理:几何操作实例 1:使用 vtkWarpTo 向指定点发生位移实例 2:使用 vtkWarpVector 按照指定向量发生位移实例 3:使用 vtkDeformPointSet 按照框架变形 VTK 数据处理:几何操作…

系统思考—战略沙盘推演咨询服务

今日与JSTO团队一起学习了《战略沙盘推演咨询服务》。通过沙盘体验,我深刻感受到组织与战略就像一张皮的正反两面。在转型过程中,即使战略非常明确,团队成员由于恐惧和顾虑,往往不愿意挑战新的业务,从而难以实现战略目…

PHP框架 Laravel

现在因为公司需求,需要新开一个Laravel框架的项目,毫无疑问,我又被借调过去了,最近老是被借调,有点阴郁,不过反观来看,这也是好事,又可以复习和巩固一下自己的知识点,接下…

Android 生成正式版密钥库 KeyStore

步骤1:打开生成正式版密钥库设置 点击 Build 菜单,选择 Generate Signed App Bundle or APK: 这是打开后的样子: 步骤2:选择 APK Android App Bundle 是用于上架 Google Play 商店的。 正常情况下选择 APK。 选择…

Rust 程序设计语言学习——常见集合:Vector String Map

Rust 中常见的集合包括 Vector&#xff08;列表&#xff09;、String&#xff08;字符串&#xff09;和 Map&#xff08;键值对&#xff09;。 Vec<T>&#xff0c;也被称为 vector。vector 允许我们在一个单独的数据结构中储存多于一个的值&#xff0c;它在内存中彼此相邻…

Java之Writer类:探索Java中的输出流

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

拿捏数据结构-top_k问题

top_k问题时间复杂度的计算 这里提前说明&#xff0c;时间复杂度的计算的目的是来计算向上调整的更优还是向下调整更优&#xff0c;从肉眼看的话向下调整优于向上调整&#xff0c;接下来我们进行时间复杂度的计算。 此时我们会用到等比数列求和以及裂项相消 如图 首先我们假设求…

【物联网实战项目】STM32C8T6+esp8266/mqtt+dht11+onenet+uniapp

一、实物图 前端uniapp效果图&#xff08;实现与onenet同步更新数据&#xff09; 首先要确定接线图和接线顺序&#xff1a; 1、stm32c8t6开发板连接stlinkv2下载线 ST-LINK V2STM323.3V3.3VSWDIOSWIOSWCLKSWCLKGNDGND 2、ch340串口连接底座&#xff08;注意RXD和TXD的连接方式…

Spring Boot集成shiro之使用redis缓存demo

1.背景 上次发了这篇文章《Spring Boot集成Shiro快速入门Demo》后&#xff0c;有网友“just.blue”后台反馈集成redis有点问题&#xff0c;今天特地把集成过程发出来 2.为什么要使用cache 用来减轻数据库的访问压力&#xff0c;从而提升查询效率。 3.Shiro使用Redis做缓存 …

Go 实现 WebSocket 的双向通信

在Go语言中实现WebSocket的双向通信通常需要使用第三方库&#xff0c;其中 gorilla/websocket 是一个非常流行和广泛使用的库。 1、安装 go get github.com/gorilla/websocket 2、编写WebSocket服务器代码 package mainimport ("fmt""github.com/gorilla/we…

AlibabaCloud(阿里云)支付方式介绍,使用虚拟卡支付阿里云

一、支付方式 二、 添加支付方式 点击添加支付方式按钮&#xff0c;您将进入添加支付方式流程。选择您偏好的支付方式&#xff0c;按页面指导进行添加即可。 1、信用卡 可以使用Fomepay的信用进行支付&#xff0c;点击获取 依次输入您银行卡的卡号、有效期、安全码&#xff…

实现一个简单的 Google Chrome 扩展程序

目录 &#x1f9ed; 效果展示 # 图示效果 a. 拓展程序列表图示效果&#xff1a; b. 当前选项卡页面右键效果&#xff1a; c. 拓展程序消息提示效果&#xff1a; &#x1f4c7; 项目目录结构 # 说明 # 结构 # 文件一览 ✍ 核心代码 # manifest.json # background.j…

JWT-登录后下发令牌

后端 写一个jwt工具类&#xff0c;处理令牌的生成和校验&#xff0c;如&#xff1a; 响应数据样例&#xff1a; 前端要做的&#xff1a;

Nginx文件解析漏洞复现:CVE-2013-4547

漏洞原理 CVE-2013-4547漏洞是由于非法字符空格和截止符导致Nginx在解析URL时的有限状态机混乱&#xff0c;导致攻击者可以通过一个非编码空格绕过后缀名限制。假设服务器中存在文件1. jpg&#xff0c;则可以通过改包访问让服务器认为访问的为PHP文件。 漏洞复现 开启靶场 …

均值算法详细教程(个人总结版)

背景 均值算法&#xff0c;也称为平均值算法&#xff0c;是统计分析中的基本方法之一。它通过求取一组数据的平均值来概括数据的集中趋势。在数据分析、机器学习、信号处理等领域&#xff0c;均值算法被广泛应用。 均值的种类 算术均值&#xff08;Arithmetic Mean&#xff…

手把手教你快速玩转香橙派AIPro

什么是香橙AIPro&#xff1f; OrangePi AIpro(8T)采用昇腾AI技术路线&#xff0c;具体为4核64位处理器AI处理器&#xff0c;集成图形处理器&#xff0c;支持8TOPS AI算力&#xff0c;拥有8GB/16GB LPDDR4X&#xff0c;可以外接32GB/64GB/128GB/256GB eMMC模块&#xff0c;支持…

设计模式 19 模板模式 Template Pattern

设计模式 19 模板模式 Template Pattern 1.定义 模板模式&#xff08;Template Pattern&#xff09;是一种行为设计模式&#xff0c;它定义了一个算法的骨架&#xff0c;将一些步骤的具体实现延迟到子类中。在模板模式中&#xff0c;定义了一个抽象类&#xff0c;其中包含了一个…

2024.5组队学习——MetaGPT(0.8.1)智能体理论与实战(中):订阅智能体OSS实现

传送门&#xff1a; 《2024.5组队学习——MetaGPT&#xff08;0.8.1&#xff09;智能体理论与实战&#xff08;上&#xff09;&#xff1a;MetaGPT安装、单智能体开发》《2024.5组队学习——MetaGPT&#xff08;0.8.1&#xff09;智能体理论与实战&#xff08;下&#xff09;&…

2024年电工杯高校数学建模竞赛(A题) 建模解析| 园区微电网风光储协调优化配置

问题重述及方法概述 问题1&#xff1a;各园区独立运营储能配置方案及其经济性分析 经济性分析采用成本-效益分析方法&#xff0c;计算购电量、弃风弃光电量、总供电成本和单位电量平均供电成本等指标。 问题2&#xff1a;联合园区储能配置方案及其经济性分析 经济性分析采用成…

《Ai企业知识库》-rasa X安装使用

背景&#xff1a; Rasa X 是一个为构建、改进和管理对话式AI助手而设计的工具。它是Rasa开源机器学习框架的一个扩展&#xff0c;旨在实现“对话驱动开发”&#xff08;Conversation-Driven Development&#xff09;。Rasa X 主要特点包括&#xff1a; 交互式学习&#xff1a;…