【Java数据结构】模拟实现ArrayList

news2024/11/20 20:31:12
import java.util.Arrays;

/**
 * ArrayList的模拟实现
 */
class SeqList{
    private int[] elem;
    private int usedSize=0;//记录当前顺序表有多少个有效数字
    public static final int DEFAULT_CAPACITY=10;//默认大小是10
    public SeqList(){
        this.elem=new int[DEFAULT_CAPACITY];
    }

    //新增元素,默认在数组最后新增
    public void add(int data){
        //判断是否表满了 ,表满了需要扩容
        if(isFull()){
            elem= Arrays.copyOf(elem,elem.length*2);
        }
        this.elem[usedSize]=data;
        usedSize++;

    }
    public boolean isFull(){
        if(elem.length==this.usedSize){
            return true;
        }
        return false;
    }
    //在pos位置新增元素
    public void add(int pos,int data){
        if(pos<0||pos>this.usedSize){
            throw new PosOutBoundsException("add 元素时,位置不合法");
        }
        if(isFull()){
            elem=Arrays.copyOf(elem,elem.length*2);
        }
        //挪数据
        for (int i = 0; i <usedSize; i++) {
            this.elem[i+1]=this.elem[i];
        }
        //存数据
        this.elem[pos]=data;
        this.usedSize++;
    }
    //判断是否包含某个元素
    public boolean isContains(int toFind){
        for (int i = 0; i <this.usedSize; i++) {
            if(elem[i]==toFind){
                return true;
            }
        }
        return false;
    }
    //查找某个元素对应的位置
    public int indexOf(int toFind){
        for (int i = 0; i <this.usedSize; i++) {
            if(elem[i]==toFind){
                return i;
            }
        }
        return -1;
    }
    //获取pos位置的元素
    public int get(int pos){
        if(!checkPos(pos)){
            throw new PosOutBoundsException("get 获取数据时,位置不合法");
        }
        return elem[pos];
    }
    //给pos位置的元素设置为value
    public void set(int pos,int value){
        if(!checkPos(pos)) {
            throw new PosOutBoundsException("set 获取数据时,位置不合法");
        }
        this.elem[pos]=value;
    }
    public boolean checkPos(int pos){
        if(pos<0||pos>=this.usedSize){
            return false;
        }
        return true;
    }
    //删除第一次出现的关键字key
    public void remove(int toRemove){
        if(isEmpty()){
            return;
        }
        int index=indexOf(toRemove);//找到toRemove 的下标
        if(index==-1){
            return ;//没有要删除的关键字
        }
        for (int i = index; i <this.usedSize; i++) {
            this.elem[i]=this.elem[i+1];//后一个往前一个覆盖
        }
        usedSize--;
    }
    public boolean isEmpty() {
        return usedSize==0;
    }
    //获取顺序表的长度
    public int size(){
        return usedSize;
    }
    //清空顺序表
    public void clear(){
        //基本数据类型
        usedSize=0;
        //引用类型
        /*for (int i = 0; i <usedSize; i++) {
            this.elem[i]=null;
        }*/
    }
    //打印顺序表
    public void display() {
        for (int i = 0; i < elem.length; i++) {
            System.out.print(elem[i]+" ");
        }
        System.out.println();
    }
}
public class Test {
    public static void main(String[] args) {
        SeqList seqList=new SeqList();
        seqList.add(1);
        seqList.add(2);
        seqList.add(3);
        seqList.add(4);
        seqList.add(5);
        seqList.display();
    }
}

 我演示了一个display方法,其他的方法自己动手试试嗷!!!

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

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

相关文章

基于FFT + CNN -Transformer时域、频域特征融合的电能质量扰动识别模型

目录 往期精彩内容&#xff1a; ​模型整体结构 1 快速傅里叶变换FFT原理介绍 第一步&#xff0c;导入部分数据&#xff0c;扰动信号可视化 第二步&#xff0c;扰动信号经过FFT可视化 2 电能质量扰动数据的预处理 2.1 导入数据 2.2 制作数据集 3 基于FFTCNN-Transform…

服务攻防-端口协议桌面应用QQWPS等RCEhydra口令猜解未授权检测

知识点&#xff1a; 1、端口协议-弱口令&未授权&攻击方式等 2、桌面应用-社交类&文档类&工具类等 章节点&#xff1a; 1、目标判断-端口扫描&组合判断&信息来源 2、安全问题-配置不当&CVE漏洞&弱口令爆破 3、复现对象-数据库&中间件&…

AS-V1000产品介绍:支持GA/T1400视图库标准(可通过GA/T1400接入海康、华为、大华等图传前端设备,实现图传功能)

目 录 一、概述 二、AS-V1000视频监控管理平台的特点 二、视频监控平台通过GA/T1400接入前端设备 &#xff08;一&#xff09;接入华为GA/T1400前端设备 &#xff08;二&#xff09;接入大华GA/T1400前端设备 &#xff08;三&#xff09;接入海康威视GA/…

QML ListView 列表视图

作者: 一去、二三里 个人微信号: iwaleon 微信公众号: 高效程序员 虽然 Repeater 在重复创建多个相似项的时候很方便,但是通常只适用于有限的简单元素,并且它还无法滚动浏览。而基于 Flickable 的视图组件(如 GridView、ListView、TableView、TreeView 等)则弥补了这些缺…

vue-3d-model

vue-3d-model - npm GitHub - hujiulong/vue-3d-model: &#x1f4f7; vue.js 3D model viewer component 通过该插件降低Threejs的使用难度 vue项目加载三维模型&#xff0c;我把模型放在了服务器的tomcat里面&#xff0c;需要对tomcat的fbx项目文件夹设置跨域&#xff0c;如…

Docker容器引擎(5)

目录 一.docker-compose docker-compose的三大概念&#xff1a; yaml文件格式&#xff1a; json文件格式&#xff1a; docker-compose 配置模板文件常用的字段&#xff1a; 二.Docker Compose 环境安装&#xff1a; 查看版本&#xff1a; 准备好nginx 的dockerfile的文…

微信小程序(三十一)本地同步存储API

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.存储数据 2.读取数据 3.删除数据 4.清空数据 源码&#xff1a; index.wxml <!-- 列表渲染基础写法&#xff0c;不明白的看上一篇 --> <view class"students"><view class"item…

银行数据仓库体系实践(16)--数据应用之财务分析

总账系统 在所有公司中&#xff0c;财务分析的基础都是核算&#xff0c;那在银行的系统体系中&#xff0c;核算功能在业务发生时由业务系统如核心、贷款、理财中实现登记&#xff0c;各业务系统会在每天切日后统计当天各机构的核算科目的发生额与余额&#xff0c;并统一送到总账…

k8s二进制及负载均衡集群部署详解

目录 常见部署方式 二进制部署流程 环境准备 操作系统初始化配置 关闭防火墙 配置SELinux 关闭SWAP 根据规划设置主机名 在master添加hosts&#xff0c;便于主机名解析 调整内核参数 配置时间同步 部署docker引擎 在所有node节点部署docker引擎 部署etcd集群 签发…

shell脚本自动备份数据库表

今日目标&#xff1a;shell脚本自动备份数据库中的表并记录执行日志和mysql输出日志 编写思路&#xff1a; &#xff08;1&#xff09;shell脚本运行mysql命令 &#xff08;2&#xff09;脚本输出记录到日志中 &#xff08;3&#xff09;定时任务自动执行shell脚本 1、she…

王子公主来扫雷0^0

&#x1fa90;&#x1fa90;&#x1fa90;欢迎来到程序员餐厅&#x1f4ab;&#x1f4ab;&#x1f4ab; 今日主菜&#xff1a;扫雷小游戏&#xff0c; 主厨&#xff1a;邪王真眼 所属专栏&#xff1a; C语言知识点 主厨的主页&#xff1a;Chef‘s blog 引言&a…

SpringFramework实战指南(五)

SpringFramework实战指南(五) 4.3 基于 注解 方式管理 Bean4.3.1 实验一: Bean注解标记和扫描 (IoC)4.3.2 实验二: 组件(Bean)作用域和周期方法注解4.3.3 实验三: Bean属性赋值:引用类型自动装配 (DI)4.3.4 实验四: Bean属性赋值:基本类型属性赋值 (DI)4.3.5 实验五:…

C语言第十六弹---操作符(下)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 操作符 1、下标访问[]、函数调用() 1.1、[ ] 下标引用操作符 1.2、函数调用操作符 2、结构成员访问操作符 2.1、结构体 2.1.1、结构的声明 2.1.2、结构体变…

Rust学习之Features

Rust学习之Features 一 什么是 Features二 默认 feature三 简单的features应用示例四 可选(optional)的依赖五 依赖的特性5.1 在依赖表中指定5.2 在features表中指定 六 命令行中特性控制七 特性统一路径八 其它8.1 相互排斥特性8.2 观察启用特性8.3 [Feature resolver version…

【Java程序设计】【C00234】基于Springboot的美食生活分享平台(有论文)

基于Springboot的美食生活分享平台&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的美食生活分享平台 主要功能如下&#xff1a;用户模块管理、美食分享笔记管理、美食笔记详情管理、公告信息管理、用户评论模块管…

node 第二十四天 mongoDB shell 命令 高级方法 $where aggregate聚合

$where 数据库数据如下 使用where语法如下 等价于 2.aggregate 聚合 使用聚合管道执行聚合操作。该管道允许用户通过一系列基于阶段的操作来处理来自集合或其他源的数据。 过滤数据, 分组数据 (排除name为 AAA 的数据 按price进行分组 每匹配一组计数1) 下面我们用aggregate…

three.js CSS3DRenderer、CSS3DSprite渲染HTML标签

有空的老铁关注一下我的抖音&#xff1a; 效果: <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red;position: relative;"></div><…

C++学习Day01之初识C++ Helloworld

目录 一、程序二、输出三、分析与总结 一、程序 #include <iostream> //标准输入输出流 i - input 输入 o - output 输出 stream 流 相当于 stdio.h using namespace std; //使用 标准 命名空间 //程序入口函数 int main() {// cout 标准输出流对象// <&l…

英语文件怎么翻译成中文?五个软件轻松应对英文文件翻译

英语文件怎么翻译成中文&#xff1f;随着全球化的发展&#xff0c;我们时常需要处理英文文件。对于非英语母语者来说&#xff0c;准确、快速地将英文文件翻译成中文变得至关重要。本文将介绍5款翻译软件&#xff0c;帮助你轻松应对英文文件的翻译工作。 1.智能翻译官 智能翻译…

【代码随想录-链表】环形链表

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…