java之顺序表的创建

顺序表的定义: 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。

我们现在要实现的顺序表功能有:增(add)、删(remove)、查(get)   改(set);

由于顺序表底层是数组,所以要创建接口在数组中包含以上功能。

步骤:

1.基本框架构建:

1.1创建一个包,里面包含一个功能接口和数组类。

1.2.在接口中写下要包含的功能。

1.3.在MyArrayList 创建基本属性:

(1).数组和数组中已经包含的元素(UsedSize),同时设置好你这个数组的最大容量(DEFAULT_CAPACITY).

(2).通过构造方法来创建一个新的数组。

2.各种方法具体的实现步骤:

2.1   add(int data )的实现:在usedsize后添加新的元素:

这幅图中,usedSize = 5  则此时我们就在索引为5下添加新元素。

怎么添加?首先要判断这个数组空间是否已满,即比较UsedSize(现有元素)和 数组长度是否已满,满的话,通过Arrays.copyOf来进行扩容,将数组长度变为原来2倍。再将新元素值赋给数组。 否则直接赋值即可。

2.2 add(int pos , int data); 在某个位置处插入新元素。

在插入前,我们需要考虑元素插入的位置是否正确,比如,你不能在-1位置处插入元素(越界),也不能在超过UsedSize位置处插入元素,因为待插入元素前后都应有元素。

此时我们就要自定义一个异常类: PosIllegal 用来检测是否插入位置错误

这个类要继承于RuntimeException 类(是 Java 中一个重要的异常类,属于 java.lang 包,它是所有运行时异常的基类,提供了一种处理那些通常不需要显式捕获或声明的异常的机制)。

之后再创建这个类的构造方法,继承父类。

再回到MyArrayList类中,创建一个检查位置是否正确的类:CheckPos,并在其中指示可能出现的异常。代码示例如下:

private void CheckPos(int pos) throws PosIllegal{  //方法可能会抛出的异常---PosIllegal异常,让调试者处理if(pos<0||pos>UsedSize){throw new PosIllegal("pos位置不合法"); // 实行抛出异常操作}}

同时,也要判断数组是否已满,这里,我们便要用到try--catch来抛出和捕捉异常

具体代码如下:

public void add(int pos, int data) {try{//可能会抛出的异常CheckPos(pos);if(isFull()){grow();}//功能实现:开始挪动元素for (int i = UsedSize-1; i >=pos ; i++) {array[i+1] = array[i];}array[pos] = data;UsedSize++;}catch(PosIllegal e){//捕捉异常:System.out.println("插入元素位置pos不合法");e.printStackTrace();//printStackTrace 是 Throwable 类中的一个方法,通常用于输出异常的详细信息和堆栈跟踪。}}
2.3:   public boolean contains(int toFind) 数组中是否包含待查找元素

这里可直接用fori循环将数组内的元素一 一与toFind比较,如果有,返回true,否则false

具体代码如下:

 public boolean contains(int toFind) {for (int i = 0; i < UsedSize; i++) {if(array[i] == toFind){return true;}}return false;}

2.4: public int get(int pos)   得到某一个位置的元素。

这里我们不得不考虑一个问题:这个数组是否为空数组。

此时就要实现一个检查数组是否为空的方法: private void CheckEmpty() ,也要创建一个

EmptyException异常类。

同时查找过程中这个元素位置也要有限制,和先前不同,这次Pos可以等于UsedSize(不妨碍元素查找)。具体代码如下:

public class EmptyException extends RuntimeException{public EmptyException(){}public EmptyException(String msg){super(msg);}
}
private void checkPos2(int pos) throws PosIllegal{if(pos<0 || pos>= UsedSize){throw new PosIllegal("pos位置不合法");}}public boolean isEmpty(){return UsedSize == 0;}private void CheckEmpty(){if(isEmpty()){throw new EmptyException("顺序表为空");}}
public int get(int pos) {try{//抛出异常CheckEmpty(); //检查数组是否为空checkPos2(pos); //元素位置是否异常return array[pos];}catch (PosIllegal e){//捕捉异常e.printStackTrace();}catch (EmptyException e){e.printStackTrace();//printStackTrace 是 Throwable 类中的一个方法,通常用于输出异常的详细信息和堆栈跟踪。}return -1;}
2.5 public void set(int pos, int value)  //再某个位置设置新的元素。

这里也要考虑数组是否为空以及元素位置是否正确,和2.4类似。代码如下:

@Overridepublic void set(int pos, int value) {try{CheckEmpty();checkPos2(pos);array[pos] = value;}catch(PosIllegal e){e.printStackTrace();}catch (EmptyException e ){e.printStackTrace();}}

2.6:public void remove(int toRemove)消除某个位置的元素:

传入要消除的元素值,再创建 public int indexOf(int toFind) 方法(for循环查找与toRemove相同的元素,返回索引值) 进而得到这个元素的位置。

位置拿到之后,怎么消除?

如图,若要消除pos位置元素,只需将索引3的元素前移覆盖索引2位置,再将索引4移动到索引3的位置即可。 具体代码如下:

@Overridepublic void remove(int toRemove) {try{//抛出异常CheckEmpty(); //数组不为空int pos = indexOf(toRemove); //得到待消除元素的位置if(pos == -1){return;}for (int i = pos; i < UsedSize-1; i++) { //?array[i] = array[i+1];  //覆盖}UsedSize--;}catch (EmptyException e){//处理/捕捉异常e.printStackTrace();}}

2.7:剩下的简单代码便不再一 一赘述

@Overridepublic int size() {return this.UsedSize;}@Overridepublic void clear() {//清空数组UsedSize = 0;}@Overridepublic void display() {  //展示数组for (int i = 0; i < UsedSize; i++) {System.out.println(array[i]+" ");}}
}

今天就给大家分享到这里,bb!

喜欢的老铁来个三联吧!

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

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

相关文章

什么是PDM系统?PDM系统核心功能是什么?如何进行产品数据管理

PDM系统介绍 PDM全称为产品数据管理&#xff0c;是一种企业级的产品研发协作平台。它集成了信息技术&#xff0c;通过全面管理和协同研发业务流程&#xff0c;提升企业的整体研发管理水平&#xff0c;缩短产品研发周期&#xff0c;降低成本&#xff0c;提高产品质量。PDM系统不…

「iOS」push与present

iOS学习 前言push与poppresent与dismiss使用dismiss弹出多级PresentedViewController 与 PresentingViewController区别 总结 前言 在此前就学习过视图的push与present。与之对应的退出方法为pop与dismiss。这里进行一次总结。 push与pop pushViewController 是通过导航控制器…

开放式耳机好用吗?哪个开放式耳机好用?

现在市面上的开放式耳机真的越来越火了&#xff0c;所以很多小伙伴也会来问我&#xff0c;有哪些品牌值得入手&#xff0c;开放式耳机到底好不好用的这个问题&#xff0c;作为专业的开放式耳机测评博主对于这个问题当然是信手拈来啦&#xff0c;这篇文章就来告诉大家如何才能选…

百度Android IM SDK组件能力建设及应用

作者 | 星途 导读 移动互联网时代&#xff0c;随着社交媒体、移动支付、线上购物等行业的快速发展&#xff0c;对即时通讯功能的需求不断增加。对于各APP而言&#xff0c;接入IM SDK&#xff08;即时通讯软件开发工具包&#xff09;能够大大降低开发成本、提高开发效率&#…

js 如何代码识别Selenium+Webdriver

Python 的 Selenium 可以模拟用户操作打开浏览器&#xff0c;前端如何去识别是人机还是真人&#xff1a; window.navigator.webdriver Selenium 人机下是这样的&#xff1a; 正常使用&#xff1a;

SpringCloud Feign 以及 一个标准的微服务的制作

一个标准的微服务制作 以一个咖啡小程序项目的订单模块为例&#xff0c;这个模块必将包括&#xff1a; 各种实体类&#xff08;pojo,dto,vo....&#xff09; 控制器 controller 服务类service ...... 其中控制器中有的接口需要提供给其他微服务&#xff0c;订单模块也需要…

Day04_JVM实战

文章目录 一、gc日志和dump快照GC日志是什么,要怎么看?dump快照是什么?要怎么看?二、gc日志和dump快照实战java.lang.OutOfMemoryError:Java heap space1、gc.log怎么看2、heapdump.hprof怎么看?①jvisualvm查看②使用MAT查看java.lang.OutOfMemoryError:Metaspace1、实时…

给大模型技术从业者的建议,入门转行必看!!

01—大模型技术学习建议‍‍‍ 这个关于学习大模型技术的建议&#xff0c;也可以说是一个学习技术的方法论。 首先大家要明白一点——(任何)技术都是一个更偏向于实践的东西&#xff0c;具体来说就是学习技术实践要大于理论&#xff0c;要以实践为主理论为辅&#xff0c;而不…

产品经理学AI:搭建大模型应用常用的三种方式

如果开发想要基于某个大模型开发一个应用该怎么做&#xff1f; 一般有以下几种方式&#xff1a; 1、自己部署大模型 部署大模型&#xff0c;分为两种模式&#xff0c;一种是部署自研大模型&#xff0c;还有一种是部署开源大模型。 部署自研大模型的优势是&#xff0c;可以完…

国产龙芯处理器双核64位系统板载2G DDR3内存迅为2K1000开发板

硬件配置国产龙芯处理器&#xff0c;双核64位系统&#xff0c;板载2G DDR3内存&#xff0c;流畅运行Busybox、Buildroot、Loognix、QT5.12 系统!接口全板载4路USB HOST、2路千兆以太网、2路UART、2路CAN总线、Mini PCIE、SATA固态盘接口、4G接口、GPS接口WIF1、蓝牙、Mini HDMI…

数据库事务的详解

1、 介绍 什么是事务? 事务是一个原子操作。是一个最小执行单元。可以由一个或多个SQL语句组成&#xff0c;在同一个事务当中&#xff0c;所有的SQL语句都成功执行时&#xff0c;整个事务成功&#xff0c;有一个SQL语句执行失败&#xff0c;整个事务都执行失败。(一组操作同时…

气膜足球馆:为青少年运动梦想护航—轻空间

随着青少年足球运动的不断普及&#xff0c;体育场馆的选择和建设正成为学校、俱乐部及家长们关注的重点。作为一种创新的场馆形式&#xff0c;气膜足球馆凭借其独特优势&#xff0c;逐渐成为青少年足球比赛和培训的理想之地。 宽敞舒适&#xff0c;助力足球成长 气膜足球馆采用…

【Linux】探索文件I/O奥秘,解锁软硬链接与生成动静态库知识

目录 1、C文件接口 1.1什么是当前路径&#xff1f; 1.2程序默认打开的文件流&#xff1a; 2、系统文件I/O 2.1.接口介绍&#xff1a; 2.1.1open&#xff1a; 参数讲解; flags如何实现一个参数就可以有多个参数传参的效果&#xff1f; open函数的返回值&#xff1a; 3…

EnzyACT——融合图技术和蛋白质嵌入预测突变蛋白活性变化

论文链接&#xff1a;EnzyACT: A Novel Deep Learning Method to Predict the Impacts of Single and Multiple Mutations on Enzyme Activity | Journal of Chemical Information and Modeling (acs.org) 文章摘要 酶工程涉及通过引入突变来定制酶&#xff0c;以扩大天然酶的…

【sgCreateCallAPIFunctionParam】自定义小工具:敏捷开发→调用接口方法参数生成工具

<template><div :class"$options.name" class"sgDevTool"><sgHead /><div class"sg-container"><div class"sg-start"><div style"margin-bottom: 10px">参数列表[逗号模式]<el-too…

旧衣回收小程序:开启旧衣回收新体验

随着社会的大众对环保的关注度越来越高&#xff0c;旧衣物回收市场迎来了快速发展时期。在数字化发展当下&#xff0c;旧衣回收行业也迎来了新的模式----互联网旧衣回收小程序&#xff0c;旨在为大众提供更加便捷、简单、透明的旧衣物回收方式&#xff0c;通过手机直接下单&…

葡萄叶病害检测系统源码分享

葡萄叶病害检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer V…

venn可视化

文章目录 前言一、数据准备二、可视化1.二维2.三维 3.数据保存总结 前言 韦恩图&#xff08;Venn diagram&#xff09;是一种用于可视化集合之间关系的图形工具。它是由英国逻辑学家约翰韦恩于1880年引入的。 韦恩图由一组圆和它们的交集区域组成。每个圆代表一个集合&#x…

【微服务】Eureka的自我保护机制

Eureka的自我保护模式正是一种针对网络异常波动的安全保护措施&#xff0c;使用自我保护模式能使Eureka集群更加的健壮&#xff0c;稳定的运行。 在正常情况下&#xff0c;Eureka客户端会定期向Eureka服务器发送心跳&#xff0c;以表明它仍然存活和可用。如果Eureka服务器在配…

神经网络推理加速入门——指令流水线

前言 刚毕业的时候在青岛某信任职&#xff0c;做嵌入式软件开发&#xff0c;需要调试电路板。公司有个要求是所有新入职的员工&#xff0c;都要去公司自己的加工厂上两周的班&#xff0c;亲自组装生产电路板&#xff0c;体验产品生产的过程。 于是&#xff0c;刚毕业的我&…