Java实现顺序表
Java顺序表
- 前言
- 一、线性表
- 介绍
- 常见线性表
- 总结
- 图解
- 二、顺序表
- 概念
- 顺序表的分类
- 顺序表的实现
- throw
- 具体代码
- 三、顺序表会出现的问题
前言
推荐一个网站给想要了解或者学习人工智能知识的读者,这个网站里内容讲解通俗易懂且风趣幽默,对我帮助很大。我想与大家分享这个宝藏网站,请点击下方链接查看。
https://www.captainbed.cn/f1
Java顺序表是Java中实现线性表结构的一种方式,它采用数组来存储元素,通过下标访问元素,具有快速访问和修改特定位置元素的特点,但插入和删除操作可能涉及较多元素的移动。
一、线性表
介绍
线性表(linear list)是n个具有相同特性的数据元素的有限序列。
线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。
常见线性表
线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串…
总结
线性表是一种数据结构,由一组有序的元素组成,元素之间具有线性关系。线性表中的元素可以是任意类型的数据,每个元素都有一个前驱元素和一个后继元素(除了第一个和最后一个元素)。线性表可以用于存储和操作一系列有序的数据。常见的线性表有数组、链表、栈和队列等。
图解

二、顺序表
概念
顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。
顺序表的分类
顺序表一般可以分为
- 静态顺序表:使用定长数组存储。
- 动态顺序表:使用动态开辟的数组存储。
静态顺序表适用于确定知道需要存多少数据的场景.
静态顺序表的定长数组导致N定大了,空间开多了浪费,开少了不够用.相比之下动态顺序表更灵活, 根据需要动态的分配空间大小.
顺序表的实现
throw
在Java中,throw关键字用于抛出异常。throw语句必须在方法体内部使用,并且后面跟着一个异常对象,如下所示:
throw new Exception("异常信息");
throw语句会立即终止当前方法的执行,并将异常抛给调用者处理。如果没有被捕获的异常将会导致程序终止。
在自定义类中,可以通过继承Exception类或其子类来创建自定义异常类。可以在方法中使用throw关键字抛出自定义异常对象,如下所示:
public void someMethod() throws CustomException {if (条件) {throw new CustomException("异常信息");}
}
在调用方代码中,可以使用try-catch语句块来捕获和处理异常,如下所示:
try {someMethod();
} catch (CustomException e) {// 处理异常逻辑
}
使用throw语句可以将异常主动抛出,从而提供更丰富的异常处理能力。
具体代码
public class SeqList {private int[] arr; // 存储顺序表的数组private int size; // 记录顺序表中元素的个数// 构造函数public SeqList(int capacity) {arr = new int[capacity];size = 0;}// 打印顺序表public void display() {for (int i = 0; i < size; i++) {System.out.print(arr[i] + " ");}System.out.println();}// 在pos位置新增元素public void add(int pos, int data) {if (pos < 0 || pos > size) {// 位置不合法throw new IllegalArgumentException("Invalid position");}if (size == arr.length) {// 数组已满,需要扩容int[] newArr = new int[arr.length * 2];System.arraycopy(arr, 0, newArr, 0, size);arr = newArr;}// 将pos位置及之后的元素后移for (int i = size - 1; i >= pos; i--) {arr[i + 1] = arr[i];}// 插入新元素arr[pos] = data;size++;}// 判定是否包含某个元素public boolean contains(int toFind) {for (int i = 0; i < size; i++) {if (arr[i] == toFind) {return true;}}return false;}// 查找某个元素对应的位置public int search(int toFind) {for (int i = 0; i < size; i++) {if (arr[i] == toFind) {return i;}}return -1;}// 获取pos位置的元素public int getPos(int pos) {if (pos < 0 || pos >= size) {// 位置不合法throw new IllegalArgumentException("Invalid position");}return arr[pos];}// 给pos位置的元素设为valuepublic void setPos(int pos, int value) {if (pos < 0 || pos >= size) {// 位置不合法throw new IllegalArgumentException("Invalid position");}arr[pos] = value;}// 删除第一次出现的关键字keypublic void remove(int toRemove) {int index = search(toRemove);if (index == -1) {// key不存在return;}// 将index位置及之后的元素前移for (int i = index + 1; i < size; i++) {arr[i - 1] = arr[i];}size--;}// 获取顺序表长度public int size() {return size;}// 清空顺序表public void clear() {size = 0;}
}
这是一个实现顺序表的Java类。顺序表是一种线性表,使用数组存储元素,通过下标访问元素。该类提供了一系列操作顺序表的方法。
- 构造函数:创建一个指定容量的顺序表,并初始化大小为0。
display()方法:打印顺序表中的所有元素。add(int pos, int data)方法:在指定位置插入一个新元素。如果位置不合法,抛出IllegalArgumentException异常。如果数组已满,需要扩容。contains(int toFind)方法:判断顺序表中是否包含某个元素。search(int toFind)方法:查找某个元素的位置。如果找到,返回该元素的位置;否则返回-1。getPos(int pos)方法:获取指定位置的元素。如果位置不合法,抛出IllegalArgumentException异常。setPos(int pos, int value)方法:将指定位置的元素设为新值。如果位置不合法,抛出IllegalArgumentException异常。remove(int toRemove)方法:删除顺序表中第一次出现的指定元素。如果元素不存在,不进行任何操作。size()方法:获取顺序表的大小。clear()方法:清空顺序表。
这些方法可以帮助我们对顺序表进行插入、删除、查询和修改等操作。
三、顺序表会出现的问题
- 顺序表中间/头部的插入删除,时间复杂度为O(N)
- 增容需要申请新空间,拷贝数据,释放旧空间。会有不小的消耗。
- 增容一般是呈2倍的增长,势必会有一定的空间浪费。例如当前容量为100,满了以后增容到200,我们再继续插入了5个数据,后面没有数据插入了,那么就浪费了95个数据空间。
相关文章:
Java实现顺序表
Java顺序表 前言一、线性表介绍常见线性表总结图解 二、顺序表概念顺序表的分类顺序表的实现throw具体代码 三、顺序表会出现的问题 前言 推荐一个网站给想要了解或者学习人工智能知识的读者,这个网站里内容讲解通俗易懂且风趣幽默,对我帮助很大。我想与…...
刷题笔记1:如何科学的限制数字溢出问题
LCR 192. 把字符串转换成整数 (atoi) - 力扣(LeetCode) 我们以力扣的此题目为例,简述在诸如大数运算等问题中如何限制数字溢出问题。 先来直接看看自己的处理方式: class Solution { public:int myAtoi(string str) {int pcur0;…...
社区供稿丨GPT-4o 对实时互动与 RTC 的影响
以下文章来源于共识粉碎机 ,作者AI芋圆子 前面的话: GPT-4o 发布当周,我们的社区伙伴「共识粉碎机」就主办了一场主题为「GPT-4o 对实时互动与 RTC 的影响」讨论会。涉及的话题包括: GPT-4o 如何降低延迟(VAD 模块可…...
基于Linux的文件操作(socket操作)
基于Linux的文件操作(socket操作) 1. 文件描述符基本概念文件描述符的定义:标准文件描述符:文件描述符的分配: 2. 文件描述符操作打开文件读取文件中的数据 在linux中,socket也被认为是文件的一种ÿ…...
C++面试题记录(网络)
TCP与UDP区别 1. TCP面向连接,UDP无连接,所以UDP数据传输效率更高 2.UDP可以支持一对一、一对多、多对一、多对多通信,TCP只能一对一 3. TCP需要在端系统维护连接状态,包括缓存,序号,确认号,…...
YoloV8改进策略:卷积篇|基于PConv的二次创新|附结构图|性能和精度得到大幅度提高(独家原创)
摘要 在PConv的基础上做了二次创新,创新后的模型不仅在精度和速度上有了质的提升,还可以支持Stride为2的降采样。 改进方法简单高效,需要发论文的同学不要错过! 论文指导 PConv在论文中的描述 论文: 下面我们展示了可以通过利用特征图的冗余来进一步优化成本。如图3所…...
图论(从数据结构的三要素出发)
文章目录 逻辑结构物理结构邻接矩阵定义性能分析性质存在的问题 邻接表定义性能分析存在的问题 十字链表(有向图)定义性能分析 邻接多重表(无向图)定义性能分析 数据的操作图的基本操作图的遍历广度优先遍历(BFS)算法思想和实现性能分析深度优先最小生成…...
spark相关知识
1.Spark的特点 Spark的设计遵循“一个软件栈满足不同应用场景”的理念,逐渐形成了一套完整的生态系统,既能够提供内存计算框架,也可以支持SQL即席查询、实时流式计算、机器学习和图计算等。 运行速度快,易使用,强大的技…...
K8S认证|CKA题库+答案| 12. 查看Pod日志
目录 12、查看Pod日志 CKA v1.29.0模拟系统 下载试用 题目: 开始操作: 1)、切换集群 2)、提取错误日志 3)、验证提取结果 12、查看Pod日志 CKA v1.29.0模拟系统 下载试用 题目: 您必须在以下C…...
【Java SE】 String、StringBuff和StringBuilder
🥰🥰🥰来都来了,不妨点个关注叭! 👉博客主页:欢迎各位大佬!👈 文章目录 1. 字符串不可变性1.1 设计不可变1.2 修改字符串创建新对象1.3 为什么字符串不可变1.4 String类设计不可变的…...
产品经理-需求分析(三)
1. 需求分析 从业务的需要出发,确定业务目的和目标,将业务需求转为产品需求 1.1 业务需求 业务需求 业务动机 业务目标 就是最根本的动机和目标成果,通过这个需求解决特定的问题 1.2 产品需求 产品需求 解决方案 产品结构 产品流程…...
Linux 编译器gcc/g++使用
gcc/g同理 编译器运行过程 1. 预处理(进行宏替换) gcc -E a.c -o a.i 预处理后还是c语言 -E 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面 告诉gcc,从现在开始进行程序的翻译,将预处理工作做完停下 2. 编译&#x…...
adam优化器计算过程(tensorflow)
一、adam原理 原理 应用 优点 缺点 二、手动实现 一步一步计算 三、使用tensorflow api实现 api使用 四、一个具体的深度学习的例子...
【数据结构与算法 | 链表篇】力扣876
1. 力扣876 : 链表的中间节点 (1). 题 给你单链表的头结点 head ,请你找出并返回链表的中间结点。 如果有两个中间结点,则返回第二个中间结点。 示例 1: 输入:head [1,2,3,4,5] 输出:[3,4,5] 解释:链表…...
kubeadm引导欧拉系统高可用的K8S1.28.X
文章目录 一. 核心组件架构二. 有状态与无状态应用三. 资源对象3.1 规约与状态3.2 资源的分类-元数据,集群,命名空间3.2.1 元数据3.2.2 集群资源 3.3 命名空间级3.3.1 pod3.3.2 pod-副本集3.3.3 pod-控制器 四. Kubeadm安装k8s集群4.1 初始操作4.2 ~~所有节点安装Docker&#x…...
【信息学奥赛】字典的键和值对换
【信息学奥赛】字典的键和值对换 💖The Begin💖点点关注,收藏不迷路💖 输入一个字典,要求将该字典的键和值对换。(注意,字典中有键的值是重复的) 输入: 一行࿰…...
使用Django框架搭建Web应用
文章目录 简介安装Django创建一个Django项目创建一个Django应用编写视图配置URL运行开发服务器总结与拓展数据库集成管理后台表单处理模板引擎安全性 简介 Django 是一款基于 Python 语言的开源 Web 应用框架,采用了 MVC(模型-视图-控制器)设…...
我用Mybatis的方式封装了OLAP查询!
背景 相信做数据平台的朋友对OLAP并不陌生,主流的OLAP引擎有Clickhouse,Impala,Starrocks…以及公司二开的OLAP平台,本次要说的OLAP属于最后一种。 最近在做一个BI项目,业务背景很简单,就是一个数据展示平…...
golang rune类型解析,与byte,string对比,以及应用
Golang中的rune类型是一个32位的整数类型(int32),它是用来表示Unicode码点的。rune类型的值可以是任何合法的Unicode码点,它通常用来处理字符串中的单个字符。 在Golang中,字符常量使用单引号来表示,例如 a。使用单引号表示的字符…...
重学java 51.Collections集合工具类、泛型
"我已不在地坛,地坛在我" —— 《想念地坛》 24.5.28 一、Collections集合工具类 1.概述:集合工具类 2.特点: a.构造私有 b.方法都是静态的 3.使用:类名直接调用 4.方法: static <T> boolean addAll(collection<? super T>c,T... el…...
基于SpringBoot+Flowable的办公流程审批系统毕设源码
博主介绍:✌ 专注于Java,python,✌关注✌私信我✌具体的问题,我会尽力帮助你。一、研究目的本研究旨在构建一个基于Spring Boot与Flowable框架的办公流程审批系统以解决传统审批模式中存在的效率低下问题。当前多数组织机构在日常运营中普遍采用人工审批…...
卷积神经网络在图像分类中的历史(1989 年至今)
原文:towardsdatascience.com/the-history-of-convolutional-neural-networks-for-image-classification-1989-today-5ea8a5c5fe20?sourcecollection_archive---------5-----------------------#2024-06-28 深度学习和计算机视觉领域最伟大创新的视觉之旅。 https…...
扩展卡尔曼滤波锂电池SOC估算【附代码】
✨ 长期致力于锂离子电池、SOC估算、锂离子电池建模、EKF算法研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流,点击《获取方式》 (1)二阶RC等效电路建模与温度自适应参数修正…...
仅0.3%用户掌握的胶片叙事技巧:用Midjourney实现“过期胶卷”时间衰减效果(含Exif元数据欺骗指令集)
更多请点击: https://intelliparadigm.com 第一章:胶片叙事与数字时代的时间诗学 胶片影像的物理性——帧率、显影时长、机械快门延时——曾将时间锚定为可触摸的物质存在;而数字媒介则以纳秒级采样、无损复制与非线性剪辑,将时间…...
嵌入式Linux系统固化:从启动卡制作到eMMC克隆的工程实践
1. 项目概述:从“启动卡”到“系统固化”的工程实践在嵌入式开发、工业控制、边缘计算乃至一些特定的服务器运维场景里,我们经常会遇到一个看似基础却至关重要的需求:如何将一个完整的Linux操作系统,从一张临时的启动介质…...
为什么92%的斯里兰卡项目在ElevenLabs僧伽罗文语音上失败?——2024最新L10n兼容性白皮书首发(附实测RTT延迟对比数据)
更多请点击: https://intelliparadigm.com 第一章:为什么92%的斯里兰卡项目在ElevenLabs僧伽罗文语音上失败? ElevenLabs 官方文档明确声明支持僧伽罗文(Sinhala),但实际部署中,斯里兰卡本地政…...
2026年阿里云部署OpenClaw/Hermes Agent 配置Token Plan怎么快速上手?看这
2026年阿里云部署OpenClaw/Hermes Agent 配置Token Plan怎么快速上手?看这。OpenClaw是开源的个人AI助手,Hermes Agent则是一个能自我进化的AI智能体框架。阿里云提供计算巢、轻量服务器及无影云电脑三种部署OpenClaw 与 Hermes Agent的方案、百炼Token …...
Beyond Compare密钥生成终极指南:三步解锁专业版完整功能
Beyond Compare密钥生成终极指南:三步解锁专业版完整功能 【免费下载链接】BCompare_Keygen Keygen for BCompare 5 项目地址: https://gitcode.com/gh_mirrors/bc/BCompare_Keygen 还在为Beyond Compare试用期结束而烦恼?想要永久解锁这款强大的…...
5分钟快速掌握FlicFlac:Windows免费音频格式转换终极指南
5分钟快速掌握FlicFlac:Windows免费音频格式转换终极指南 【免费下载链接】FlicFlac Tiny portable audio converter for Windows (WAV FLAC MP3 OGG APE M4A AAC) 项目地址: https://gitcode.com/gh_mirrors/fl/FlicFlac 还在为不同设备间的音频格式不兼容…...
PXIe-9150嵌入式控制器:构建高集成度自动化测试系统的核心
1. 项目概述:从一块板卡到一套系统最近在整理实验室的测试设备,翻出来几台老旧的PXI机箱,想着怎么把它们重新利用起来。正好手头有个新项目,需要搭建一套多通道、高精度的数据采集与实时处理系统,传统的工控机加板卡的…...
