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

一.顺序表的概念🙉

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

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

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

二.顺序表的实现🐱

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.rhkb.cn/news/333732.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入分析 Android Activity (八)

文章目录 深入分析 Android Activity (八)1. Activity 的资源管理1.1 使用资源 ID1.2 动态加载资源1.3 资源的本地化1.4 使用 TypedArray 访问资源 2. Activity 的配置变更处理2.1 在 Manifest 文件中声明配置变更2.2 重写 onConfigurationChanged 方法2.3 保存和恢复实例状态 …

网页图片加载慢的求解指南

网页/图片加载慢的求解指南 一、前言与问题描述 今天刚换上华为的HUAWEI AX3 Pro New,连上WIFI后测速虽然比平时慢,但是也不算太离谱,如下图所示: 估计读者们有也和作者一样,还没意识到事情的严重性😁。 …

Android Display Graphics #1 整体框架介绍一

软件基础 Android的framework层提供了一系列的图像渲染API,可绘制2D和3D。简单理解就是上层开发APP的小伙伴提供了接口,开发者可以直接显示对应的自己内容。但如果掌握了Display底层逻辑再写上层app,会有掌控力,出问题可以根据lo…

【ai】chatgpt的plugin已经废弃

发现找不到按钮,原来是要申请: https://openai.com/index/chatgpt-plugins/ 发现申请已经跳转了,好像是废弃了? 不接受新插件了,但是openai的api 是可以继续用的。 https://openai.com/waitlist/plugins/We are no longer accepting new Plugins, builders can now create…

医疗小程序源码SpringBoot2.X + Vue + UniAPP全栈开发

源码说明: 看到好多坛友都在求SpringBoot2.X Vue UniAPP,全栈开发医疗小程序 – 带源码课件,我看了一下,要么链接过期,要么课件有压缩密码。 特意整理了一份分享给大家,个人认为还是比较全面的。 希望…

最后两天!百度云加速正式停服

百度云加速将于5月30日,正式关闭服务器,仅保留官网首页通知。 届时如网站还在百度云加速接入的,将无法正常访问! 如果您还有域名在百度云加速接入的请尽快做迁移安排,以免造成损失。 目前在主机吧购买的域名已经全部…

使用华为快传同步文件至电脑

使用华为快传同步文件至电脑,电脑端未发现设备解决办法 1、手机和电脑连同一网络 2、打开手机华为分享,打开电脑网络 3、网络中找到设备,输入账户密码进行连接(未找到设备往下继续看) 未找到设备解决办法&#xff1…

攒粒是什么?怎么用攒粒赚钱?

攒粒简介 攒粒的前身是91问问,隶属于上海道道永泉市场调查有限公司,是一家专业的全球在线调研服务公司,也是是国内排名前列的社区调查之一,10年在线调研,600万会员亲身体验,提供网络调查、市场调查、问卷调…

Go源码--sync库(1)

简介 这篇主要介绍 sync.Once、sync.WaitGroup和sync.Mutex sync.Once once 顾名思义 只执行一次 废话不说 我们看源码 英文介绍直接略过了 感兴趣的建议读一读 获益匪浅 其结构体如下 Once 是一个严格只执行一次的object type Once struct {// 建议看下源码的注解&#xf…

联想应用商店开发者常见问题FAQ

Phone/Pad应用常见问题 应用上传FAQ Q. 上传apk包时,提示“该包名已存在”如何处理? A:若应用包名出现冲突,请先核实该账号是否已存在该包名产品,若不在该账号下,请进行应用认领。 Q. 应用是否可以授权…

AI图书推荐:用ChatGPT和Python搭建AI应用来变现

《用ChatGPT和Python搭建AI应用来变现》(Building AI Applications with ChatGPT API)将ChatGPT API与Python结合使用,可以开启构建非凡AI应用的大门。通过利用这些API,你可以专注于应用逻辑和用户体验,而ChatGPT强大的…

爬虫技术升级:如何结合DrissionPage和Auth代理插件实现数据采集

背景/引言 在大数据时代,网络爬虫技术已经成为数据收集的重要手段之一。爬虫技术可以自动化地从互联网上收集数据,节省大量人力和时间成本。然而,当使用需要身份验证的代理服务器时,许多现有的爬虫框架并不直接支持代理认证。这就…

three.js能实现啥效果?看过来,这里都是它的菜(11)

Hi,这是three.js动画效果第十一期分享了。 在 Three.js 中创建光线流边动画可以通过使用 ShaderMaterial 和自定义的着色器程序来实现。下面是一个简单的示例代码,演示了如何在 Three.js 中创建光线流边动画: // 创建场景 var scene new T…

【Qt】事件

文章目录 1 :peach:事件介绍:peach:2 :peach:事件的处理:peach:3 :peach:按键事件:peach:3.1 :apple:单个按键:apple:3.2 :apple:组合按键:apple: 4 :peach:鼠标事件:peach:4.1 :apple:鼠标单击事件:apple:4.2 :apple:鼠标释放事件:apple:4.3 :apple:鼠标双击事件:apple:4.4 :a…

python下载安装教程(最新图文下载)__python下载

一、下载安装包 官网下载,下载流程参考下面截图。 下载安装python安装包,网盘点此下载::点击此处直接下载 点击图片中的“Download”按钮,然后选择需要下载的版本,最后在跳转的页面中,选择你…

VM中Ubuntu16.04的下载以及ROS—kinetic的版本下载

一、Ubuntu镜像地址 转载备份一下; 官方下载地址(不推荐) https://www.ubuntu.com/downloadhttps://www.ubuntu.com/download 中科大源 Index of /ubuntu-releases/16.04/http://mirrors.ustc.edu.cn/ubuntu-releases/16.04/ 阿里云开…

【Leetcode 160】环形链表——双指针,细节讲解

题目 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置&#…

Web安全:文件上传漏洞详解,文件上传漏洞原理、绕过方式和防御方案。

「作者简介」:2022年北京冬奥会网络安全中国代表队,CSDN Top100,就职奇安信多年,以实战工作为基础对安全知识体系进行总结与归纳,著作适用于快速入门的 《网络安全自学教程》,内容涵盖系统安全、信息收集等…

在XP/Vista系统下使用Node.js的babel-cli命令行工具转码ES6语法的js文件,让IE8浏览器也能运行

在XP系统下IE浏览器最高只能装到IE8,在Vista系统下最高只能装到IE9。 2015年以后,JavaScript新增了很多语法,比如class、extends,还有let和const等等,这些语法都是XP下的终端浏览器IE8所不支持的。要想让使用了这些新式…

【Django】中间件实现钩子函数预处理和后处理,局部装饰视图函数

在app文件夹里新建middleware.py继承MiddlewareMixin, 编写中间件类,重写process_request、process_response钩子函数 from django.http import HttpRequest, HttpResponse from django.utils.decorators import decorator_from_middleware from django…