《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.mzph.cn/bicheng/17223.shtml

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

相关文章

duckdb 插件机制研究

本文研究 duckdb 内置的 extensions 工作机制。 插件架构 在 duckdb 源码内,内置了一组原生插件,位于顶层 extension 目录下: 除此之外,还支持 Out-of-Tree Extension,简单说就是独立的插件,不是集成在源…

Star CCM+绘图显示设置

前言 如前文介绍,根据报告创建监视器与绘图后,在绘图中会出现报告绘图。此处可以自定义绘图的格式,如网格显示、字体大小、曲线的粗细等。同时也可以根据需要创建右坐标,分别监测不同类型的函数数值。为此方便后期输出仿真报告。…

哆啦AAA萌也能用HTML画出来?看这里!【完整代码可运行】

关注微信公众号「ClassmateJie」有完整代码以及更多惊喜等待你的发现。 简介/效果展示 你是否曾经想过&#xff0c;那些可爱的哆啦A梦角色是如何被创造出来的呢&#xff1f;今天&#xff0c;我要带你一起探索一个神奇的秘密——用HTML画出哆啦A梦&#xff01; 代码 <!DOCT…

【quarkus系列】创建quarkus第一个应用程序

文章目录 序言环境准备创建项目项目分析程序代码构建访问项目 序言 Quarkus 是一个设计用于 Kubernetes 和云原生环境的 Java 框架&#xff0c;具有快速启动时间、低内存消耗和强大的开发者体验。溪源将带您一步步创建一个简单的 Quarkus 应用程序。 环境准备 在开始之前&am…

Neo4j安装部署及python连接neo4j操作

Neo4j安装部署及python连接neo4j操作 Neo4j安装和环境配置 安装依赖库&#xff1a; sudo apt-get install wget curl nano software-properties-common dirmngr apt-transport-https gnupg gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y 增加Neo4 GPG key&…

为什么并行化将会是下一代的区块链解决方案?

原文标题&#xff1a;《Parallel Execution: The Next Generation of Blockchains》撰文&#xff1a;Paul Timofeev 、Mike Jin、Gabe Tramble 编译&#xff1a;Chris&#xff0c;Techub News 区块链是虚拟机&#xff0c;一种软件基础的计算模型&#xff0c;它运行在任何人都可…

Pytorch深度学习实践笔记10(b站刘二大人)

&#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;pytorch深度学习 &#x1f380;CSDN主页 发狂的小花 &#x1f304;人生秘诀&#xff1a;学习的本质就是极致重复! 《PyTorch深度学习实践》完结合集_哔哩哔哩_bilibi…

C++的第一道门坎:类与对象(一)

1.面向过程与面向对象 1.1面向过程 我们之前学习的C语言就是一种面向过程的语言&#xff0c;面向过程的语言强调的是具体实现的过程&#xff0c;一般用函数来具体实现。我们用面向过程的思想&#xff0c;就可以把炒菜分为以下几个步骤: 1.2面向对象 而对于面向对象的语言而言…

【简单介绍下容器是什么?】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

【Spring】Spring AOP底层原理:JDK动态代理和CGLIB动态代理

目录 1、代理模式 1.1、静态代理 1.2、动态代理 2、JDK 动态代理 2.1、jdk动态代理简介 2.2、使用JDK动态代理机制步骤 3、CGLIB 动态代理 3.1、CGLIB 动态代理的特性 3.2、CGLIB的核心类 3.3、CGLIB 动态代理步骤 4、JDK 和 CGLIB 创建代理对象的区别 ​编辑 1、…

(四)手把手教你内网穿透,实现外网主机访问内网服务器

背景&#xff1a;书接上回&#xff0c; 服务器的使用-CSDN博客 课题组成员都有自己的账号&#xff0c;且能通过内网访问服务器&#xff0c;进行远程连接了。我们知道内网中的主机可以访问公网的主机&#xff0c;反之不可以访问。那么如果课题组成员在家不在内网区域内&#x…

源码编译安装LAMP与部署

目录 一、LAMP架构的简述 1.LAMP搭建时各组件安装顺序 二、编译安装Apache httpd服务 1.关闭防火墙&#xff0c;将安装Apache所需软件包传到/opt目录下 2.安装环境依赖包​编辑 3.配置软件模块 4.编译及安装 5.优化配置文件路径&#xff0c;并把httpd服务的可执行程序文…

基于51单片机的智能灯光控制系统

一.硬件方案 智能灯光控制系统由单片机最小系统、人体感应模块、关照强度模块、灯光控制模块、电源模块和灯泡组成。本文以STC89C52单片机为核心&#xff0c;通过利用光照度和红外人体感应相结合主动与被动的探测方法&#xff0c;现了室内无人或者关照充足时灯光自动光灯&…

Kubernetes 容器资源管理Resources和探针Probe

资源配额 Resources 在 Kubernetes 中&#xff0c;resources 配置用于设置容器的资源请求和限制&#xff0c;以确保集群中的资源&#xff08;如 CPU 和内存&#xff09;得到合理分配和使用。 在之前的pod中&#xff0c;不写 resources 字段。就意味着 Pod 对运行的资源要求“…

Java面试八股之AQS对资源的共享方式

AQS对资源的共享方式 AQS设计了一套灵活的机制&#xff0c;不仅支持独占&#xff08;Exclusive&#xff09;锁模式&#xff0c;也支持共享&#xff08;Shared&#xff09;锁模式&#xff0c;使得资源可以被一个或者多个线程以不同的方式访问。这两种模式通过控制一个内部的vol…

pyqt QTableView表格控件

pyqt QTableView表格控件 QTableView效果代码 QTableView QTableView 是 PyQt中的一个控件&#xff0c;用于显示表格数据。它通常与 QAbstractItemModel 或其子类&#xff08;如 QStandardItemModel&#xff09;一起使用&#xff0c;以提供和管理表格中的数据。 效果 代码 i…

wordpress主题 ACG美化插件v3.4.2支持zibll主题7b2主题美化

独具一格的二次元风格&#xff0c;打造全新的子比美化方向 大部分代码均为CSS、JS做成插件只是为了方便懒人小白站长 后台全功能一览&#xff0c;大部分美化均为网上通用流传&#xff0c;

2.冒泡排序

样例输入 5 8 3 6 4 9 样例输出 3 4 6 8 9 以下是解题答案&#xff1a; class demo1{public static void main(String[] args) {Scanner scnnew Scanner(System.in);int[] array new int[scn.nextInt()];if(array.length>0&&array.length<200){for(int…

python列表访问的深入解析

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、正向索引与负索引的奥秘 二、切片&#xff1a;高效访问多个元素 切片示例 三、切片的…

Java 文件操作和输入输出流

在 Java 编程中&#xff0c;文件操作和输入输出流是非常常见和重要的任务&#xff0c;它们允许你读取和写入文件、处理数据流等。 文件操作概述 文件操作是指对文件进行创建、读取、写入、删除等操作的过程。在 Java 中&#xff0c;文件操作通常涉及到使用文件对象、输入输出…