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类。顺序表是一种线性表,使用数组存储元素,通过下标访问元素。该类提供了一系列操作顺序表的方法。

  1. 构造函数:创建一个指定容量的顺序表,并初始化大小为0。
  2. display()方法:打印顺序表中的所有元素。
  3. add(int pos, int data)方法:在指定位置插入一个新元素。如果位置不合法,抛出IllegalArgumentException异常。如果数组已满,需要扩容。
  4. contains(int toFind)方法:判断顺序表中是否包含某个元素。
  5. search(int toFind)方法:查找某个元素的位置。如果找到,返回该元素的位置;否则返回-1。
  6. getPos(int pos)方法:获取指定位置的元素。如果位置不合法,抛出IllegalArgumentException异常。
  7. setPos(int pos, int value)方法:将指定位置的元素设为新值。如果位置不合法,抛出IllegalArgumentException异常。
  8. remove(int toRemove)方法:删除顺序表中第一次出现的指定元素。如果元素不存在,不进行任何操作。
  9. size()方法:获取顺序表的大小。
  10. clear()方法:清空顺序表。

这些方法可以帮助我们对顺序表进行插入、删除、查询和修改等操作。

三、顺序表会出现的问题

  1. 顺序表中间/头部的插入删除,时间复杂度为O(N)
  2. 增容需要申请新空间,拷贝数据,释放旧空间。会有不小的消耗。
  3. 增容一般是呈2倍的增长,势必会有一定的空间浪费。例如当前容量为100,满了以后增容到200,我们再继续插入了5个数据,后面没有数据插入了,那么就浪费了95个数据空间。

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

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

相关文章

春秋云境CVE-2018-20604

简介 雷风影视CMS是一款采用PHP基于THINKPHP3.2.3框架开发&#xff0c;适合各类视频、影视网站的影视内容管理程序&#xff0c;该CMS存在缺陷&#xff0c;可以通过 admin.php?s/Template/edit/path/*web*..*..*..*..*1.txt 的方式读取任意文件。 正文 1.进入靶场 2./admin…

【数据结构】二叉树-堆(上)

个人主页~ 二叉树-堆 一、树的概念及结构1、概念2、相关概念3、树的表示4、树的实际应用 二、二叉树的概念和结构1、概念2、特殊二叉树3、二叉树的性质4、二叉树的存储结构&#xff08;1&#xff09;顺序存储&#xff08;2&#xff09;链式存储 三、二叉树的顺序结构以及实现1、…

【C++】——入门基础知识超详解

目录 ​编辑 1.C关键字 2. 命名空间 2.1 命名空间定义 2.2 命名空间使用 命名空间的使用有三种方式&#xff1a; 注意事项 3. C输入&输出 示例 1&#xff1a;基本输入输出 示例 2&#xff1a;读取多个值 示例 3&#xff1a;处理字符串输入 示例 4&#xff1a;读…

Python并发编程大揭秘:打造你的多任务处理超能战队!

今天给大家带来的是学习如何构建一个能够同时处理海量任务的超级团队。从简单的线程和锁&#xff0c;到复杂的异步IO和多进程部署&#xff0c;每一个工具都像是你团队中的一员&#xff0c;各有所长&#xff0c;共同协作&#xff01; 文章目录 Python进阶之并发和并行编程详解1.…

【Linux-INPUT输入的子系统】

Linux-INPUT输入的子系统 ■ input 子系统简介■ input 驱动编写流程■ ■ input 子系统简介 input 子系统就是管理输入的子系统&#xff0c; input 子系统分为 input 驱动层、 input 核心层、 input 事件处理层&#xff0c;最终给用户空间提供可访问的设备节点 ■ input 驱…

React类组件生命周期详解

在React的类组件中&#xff0c;从组件创建到组件被挂载到页面中&#xff0c;这个过程react存在一系列的生命周期函数&#xff0c;最主要的生命周期函数是componentDidMount、componentDidUpdate、componentWillUnmount 生命周期图例如下 1. componentDidMount组件挂载 如果你…

S1E45:单链表1 课后作业

测试题&#xff1a;0. 相比起数组来说&#xff0c;单链表具有哪些优势呢&#xff1f; 答&#xff1a;长度非固定&#xff0c;可以申请添加长度 答案&#xff1a;对于数组来说&#xff0c;随机插入或者删除其中间的某一个元素&#xff0c;都是需要大量的移动操作&#xff0c;而…

网络攻击攻击之-远程命令执行/RCE告警运营分析篇

在各种网络安全产品的告警中,远程命令执行是一种非常常见的告警。本文将从远程命令执行的定义,远程命令执行利用的流量数据包示例,远程命令执行的suricata规则,远程命令执行的告分析警研判,远程命令执行的处置建议等几个方面阐述如何通过IDS/NDR,态势感知等流量平台的远程…

深入解析RPC技术:原理、实现与应用

RPC&#xff08;Remote Procedure Call&#xff0c;远程过程调用&#xff09;是一种计算机通信协议&#xff0c;允许一个程序&#xff08;客户端&#xff09;在本地调用另一个程序&#xff08;服务器&#xff09;中的函数或方法&#xff0c;并获取返回结果&#xff0c;就像调用…

C++:STL简介和容器string用法篇

一、STL简介 STL是C中的标准模板库&#xff08;Standard Template Library&#xff09;的缩写。它是C标准库的一部分&#xff0c;提供了一系列的数据结构和算法模板&#xff0c;包括各种容器、算法、迭代器、仿函数等&#xff0c;用于简化和加速C程序的开发过程。STL的设计理念…

shell脚本开发基础

shell脚本开发基础 什么是linux内置命令&#xff1f;什么是外置命令 内置命令&#xff1a;在系统启动时就加载入内存&#xff0c;常驻内存&#xff0c;执行效率更高&#xff0c;但是占用资源&#xff0c;cd 外置命令&#xff1a;系统需要从硬盘中读取程序文件&#xff0c;再读…

第八篇【传奇开心果系列】Python微项目技术点案例示例:以微项目开发为案例,深度解读Dearpygui 编写图形化界面桌面程序的优势

传奇开心果博文系列 系列博文目录Python微项目技术点案例示例系列 博文目录前言一、开发图形化界面桌面程序的优势介绍二、跨平台特性示例代码和解析三、高性能特性示例代码和解析四、简单易用特性示例代码和解析五、扩展性强示例代码和解析六、现代化设计示例代码和解析七、知…

什么是云渗透测试?

推荐阅读&#xff1a; 什么是安全态势&#xff1f; 什么是人肉搜索 什么是恶意软件&#xff1f; 什么是数字取证&#xff1f; 什么是语音网络钓鱼&#xff1f; 什么是网络安全中的社会工程&#xff1f; 什么是网络安全中的威胁情报&#xff1f; 什么是端点检测和响应 (…

linux 阿里云服务器安装ImageMagick和php扩展imagick

操作系统版本 Alibaba Cloud Linux 3.2104 LTS 64位 # 1.安装ImageMagick yum install -y ImageMagick ImageMagick-devel # 没有pecl要先安装pecl 和头文件 sudo yum install php-devel # 2.pecl 安装扩展 pecl install imagick #寻找所有php.ini文件 find / -name php.…

静态随机存储器(SRAM)

目录 介绍 基本的 SRAM 存储单元阵列 1. SRAM 存储单元 2. SRAM 阵列 3. SRAM 阵列的读写操作 4. SRAM 阵列的扩展 5. SRAM 阵列的应用 6. SRAM 阵列的优缺点 基本的 SRAM 逻辑结构 1. 存储单元 2. 存储单元阵列 3. 译码器 4. 读写电路 5. 控制逻辑 6. SRAM 逻辑…

【前端之ES6语法】

前端之ES6语法 1. ES6简介2. ES6新特性3.ES6不支持&#xff0c;使用babel3.1 参考文献 4.let和const命令5. 模版字符串6.函数之默认值、剩余参数7. 函数之扩展运算符、箭头函数8.箭头函数this指向和注意事项9.解构赋值10.对象扩展11.Symbol类型12.Set集合类型13.Map数据类型14.…

React自定义Componment和State深层次理解-07

本节主要从底层原理上分析下React开发相关的内容和注意事项&#xff0c;本节会围绕使用展开&#xff0c;而非源码讲解。 Componment详解 什么是组件 在 MVVM架构出现之前&#xff0c;组件主要分为两种。 狭义上的组件&#xff0c;又称为 UI 组件&#xff0c;比如 Tabs 组件、…

Java计算日期相差天数的几种方法

Java计算日期相差天数的几种方法 &#x1f5d3;️ Java计算日期相差天数的几种方法摘要引言一、使用java.util.Date和java.util.Calendar&#x1f4c5;1. 使用java.util.Date示例代码 2. 使用java.util.Calendar示例代码 二、使用java.time.LocalDate&#x1f4c6;示例代码 三、…

微信小程序文本框输入显示已经输入的字数

我们遇到这样的需求&#xff0c;就是微信小程序的输入框下面需要显示输入的字数&#xff1a; 我们通常会使用bindinput事件&#xff0c;让显示的字数等于value的长度&#xff0c;看下面的图&#xff1a; 但在实践中&#xff0c;真机测试中&#xff0c;我们会发现以下问题: 这个…

IP编址、进制转换、IP地址分类、变长子网掩码VLSM、无类域间路由CIDR

前言 网络层位于数据链路层与传输层之间。网络层中包含了许多协议&#xff0c;其中最为重要的协议就是IP协议。网络层提供了IP路由功能。理解IP路由除了要熟悉IP协议的工作机制之外&#xff0c;还必须理解IP编址以及如何合理地使用IP地址来设计网络。 IP编址 每个网段上都有两…