Java 实现在顺序表末尾插入一个元素

news2024/9/22 17:27:30

一、思路

1.因为我们是用数组实现的顺序表,因此首先要保证数组有足够的空间来进行插入元素.
2.如果数组满了就需要将数组扩容,没满就开始插入.
3.当前数组中的元素个数就是每一次要插入的末尾位置的下标.
4.定义一个 usedSize 来表示当前的元素个数.
5.插入的时候就是往 usedSize 下标插入一个元素.
6.每一次成功插入后,就给元素个数加一,也就是 usedSize 加一.


二、图解


当前的 data 就是要插入的元素,末尾位置指的是紧挨着最后一个元素的位置,而不是数组的最后一个位置,在当前情况下,末尾位置就是 5 下标的位置。

上述图片展示的是插入一个新元素前的情况,可以看到此时数组中有 5 个元素,usedSize 的值就是 5,也就是说,我要插入的位置的下标就是当前的 usedSize 的下标,也就是 5 下标。



上述是插入后的图解,可以看到此时的 data 元素占据了 5 下标的位置。

如果此时我要再插入一个新元素,因为此时的元素个数变为了 6 ,因此插入的位置虽然还是 usedSize 下标,但是由 5 下标变为了 6 下标。

下图展示的再次插入一个新元素的情况。


鉴于以上,足以证明 usedSize 的值,也就是当前的元素个数即是要插入的末尾位置的下标。


三、如何判断数组当前的空间是否满了

求出当前 数组长度顺序表长度(元素个数),之后再拿它们两个比较,如果元素个数大于或者等于数组长度,此时就说明数组空间满了,就需要扩容了。

写一个 size() 方法用来求当前顺序表长度。

public int size() {
    // 直接返回元素个数
    return this.usedSize;
}


然后使用下面语句求出数组的长度。

this.elem.length


将它们两个比较就可以判断出当前的空间是不是满了。

可以写一个方法来判断空间是不是满的。

 public Boolean isFull() {
     // 如果顺序表长度大于或者等于数组的长度就是满了
     //if (size() >= this.elem.length) {
         // 此时为满了
            //return true;
     //}
     // 此时为不满
     //return false;

     // 简化的写法
     return size() >= this.elem.length; // 根据返回的真假来判断是否满了
 }


返回的结果是 true 就表示空间满了需要扩容;如果是 false 就表示还没满。


扩容操作



以上就是空间满了的情况,接下里讲解扩容操作

 this.elem = Arrays.copyOf(this.elem, 2 * this.elem.length);


直接通过以上语句来将数组空间扩大为原来的 2 倍。


使用 Arrays.copyOf 来扩容, elem 是数组名;2 表示的是扩大 2 倍;elem.length 求的是数组长度。


四、代码

import java.util.Arrays;

class ArrayList {
    //初始化数组、元素个数
    public int[] elem; // 未初始化的数组
    public int usedSize; // 记录元素个数
    public static final int DEFAULT_SIZE = 10;
    
    // 构造方法
    public ArrayList() {
        // 初始化数组元素个数为 10 个
        this.elem = new int[DEFAULT_SIZE];
    }

    // 求顺序表的长度
    public int size() {
        // 直接返回元素个数
        return this.usedSize;
    }

    // 判断是不是空间满了的方法
    public Boolean isFull() {
        // 如果顺序表长度大于或者等于数组的长度就是满了
        //if (size() >= this.elem.length) {
            // 此时为满了
            //return true;
        //}
        // 此时为不满
       //return false;

        // 简化的写法
        return size() >= this.elem.length; // 根据返回的真假来判断是否满了
    }

    // 在顺序表末尾位置插入一个元素 data
    public void add(int data) {
        // 首先要判断空间是不是满了
        if (isFull()) {
            // 此时满了,要扩容 - 扩容为原来的 2 倍
            this.elem = Arrays.copyOf(this.elem, 2 * this.elem.length);
        }

        // 没满就开始插入操作 usedSize 位置就是末尾的下标
        this.elem[this.usedSize] = data;
        // 元素个数加1
        this.usedSize++;
    }

    // 打印当前顺序表中所有的元素以便于观察结果,这并不是顺序表中的操作!!!
    public void disPlay() {
        for (int i = 0; i < this.usedSize; i++) {
            // 输出的元素之间加上空格
            System.out.print(this.elem[i] + " ");
        }
    }
}

public class MyArrayList {

    public static void main(String[] args) {
        ArrayList arrayList = new ArrayList();

        // 测试在顺序表末尾插入一个元素的方法
        arrayList.add(1);
        arrayList.add(2);
        arrayList.add(3);
        // 打印当前的顺序表中的元素
        arrayList.disPlay();
    }
}



根据输出结果,可以看到成功插入了元素。

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

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

相关文章

Pandas+ChatGPT强强结合诞生PandasAI,数据分析师行业要变天了?

大家好&#xff0c;我是千与千寻&#xff0c;可以叫我千寻&#xff0c;我自己主要的编程语言是Python和Java。 说到Python编程语言&#xff0c;使用Python语言主要使用的是数据科学领域的从业者。 Python编程语言之所以在数据科学领域十分火热&#xff0c;源于Python语言的三…

9.Ansible Conditions介绍

Ansible条件语句 1)上面的例子在不同的机器上安装nginx&#xff0c;不同的操作系统风格使用不同的软件包管理器&#xff61;debian使用APT, Red Hat使用Yum, 但这是两个独立的Playbook,您必须为各自的服务器使用正确的剧本&#xff61; 可以使用条件语句&#xff0c;将这两个P…

Mongodb在Linux下载安装及部署

前言 一、下载安装包 Mongodb官网&#xff1a;Download MongoDB Community Server | MongoDB 二、安装及配置 博主下载的安装包是&#xff1a;mongodb-linux-x86_64-rhel70-6.0.6.tgz 新建目录 # 进入 usr 文件夹 cd /usr# 新建 mongodb 文件夹 mkdir mongodb# 进入 mongodb …

如何自学成为黑客

学习路线 不BB&#xff0c;直接上干货。 学完下面的内容&#xff0c;绝对可以进入黑客圈。 文末有福利噢&#xff01; 第一步&#xff1a;计算机基础 了解计算机基本常识&#xff0c;常用软件使用。需要学会基本使用的软件或技术有&#xff1a;Word、VMware、VPN、Visual St…

快速实现工程化部署,亚马逊云科技为AIGC产品化提供可靠基础

本文将以Stable Diffusion Quick Kit在亚马逊云科技Amazon SageMaker上的部署来介绍Stable Diffusion模型基础知识&#xff0c;HuggingFace Diffusers接口&#xff0c;以及如何使用Quick Kit在SageMaker Endpoint上快速部署推理服务。 Stable Diffusion模型 2022年由Stability…

自己拍摄的视频剪辑时如何消音?

由于录制环境的影响&#xff0c;有时制作出来的视频原始声音可能无法达到令人满意的效果&#xff0c;可能有噪声存在。这个时候&#xff0c;就应该先消除视频原始声音&#xff0c;然后后期再去给视频添加配音。有哪些适合给自己拍摄的视频调为静音的方法&#xff0c;来看看有哪…

详解 Windows 10 安装 CUDA 和 CUDNN

目录 查看本机 Window 10 系统已经安装 NIVIDIA 的驱动版本说在前面查看驱动版本 CUDA下载直接下载最新的 CUDA下载历史版本的 CUDA 安装测试 CUDNN下载 下载最新版本的 cuDNN下载历史版本的 cuDNN, 如: cuDNN 12.0安装 关于添加系统环境变量的问题 ⭐️⭐️说在前面!!! 建议 先…

平均年薪20W,自动化测试工程师这么吃香?

自动化测试工程师&#xff0c;平均年薪20w绝对不是空穴来凤&#xff0c;甚至我还说少了&#xff0c;加上年终奖和奖金等等年薪可能还不止20w这个水平&#xff0c;让我们看看下方截图&#xff0c;【来自于职友集】 本篇文章将由以下4个部分来展开&#xff1a; 1. 什么是自动化测…

PaddleClas初体验

PaddleClas初体验 该包是由百度PaddlePaddle组织下开源的项目&#xff0c;主要用于图像分类&#xff0c;图像搜索等相关任务。 项目地址&#xff1a; https://github.com/PaddlePaddle/PaddleClashttps://pypi.org/project/paddleclas 主要构件&#xff1a; PP-ShiTu&…

企业的数据信息值钱吗?如何提升数据信息的价值?

越来越多的企业也将数据视为转型发展、重塑竞争优势和提升组织治理能力的重要战略资产&#xff0c;并对这一重要资产进行系统性、体系化的管理&#xff0c;以便充分挖掘数据的战略、战术价值。鉴于此&#xff0c;对数据资产进行体全面盘点、构建企业级的数据资产目录成为了数据…

aigc分享

AIGC技术分享 AIGC概述 AIGC的概念、应用场景和发展历程 机器学习基础 机器学习的基本概念、分类和常用算法&#xff0c;如线性回归、决策树、支持向量机、神经网络等。 深度学习基础 深度学习的基本概念、分类和常用算法&#xff0c;如卷积神经网络、循环神经网络、自编…

面试专题:java多线程(2)-- 线程池

1.为什么要用线程池&#xff1f; 线程池提供了一种限制和管理资源&#xff08;包括执行一个任务&#xff09;。 每个线程池还维护一些基本统计信息&#xff0c;例如已完成任务的数量。 这里借用《Java并发编程的艺术》提到的来说一下使用线程池的好处&#xff1a; 降低资源消…

【嵌入式烧录/刷写文件】-1.6-剪切/保留Motorola S-record(S19/SREC/mot/SX)文件中指定地址范围内的数据

案例背景&#xff1a; 有如下一段S19文件&#xff0c;保留地址范围0x9140-0x91BF内的数据&#xff0c;删除地址范围0x9140-0x91BF外的数据。 S0110000486578766965772056312E30352EA6 S123910058595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F70717273747576775B S12391207…

如何判断一个点是否在凸多边形内 - golang

判断一个点是否在凸多边形内的方法很多&#xff0c;此处仅给出使用向量叉积法判断点是否在凸多边形内的方法。 以下图为例说明问题&#xff1a; 原理&#xff1a; 1. 将多边形的第 i 条边的第一个顶点指向点 P 得到向量 v1&#xff0c;然后将从第一个顶点指向第二个顶点得到向…

Java 多线程实现1到1千万的求和操作

一、使用多线程的背景 提高程序速度和响应性&#xff1a;许多应用程序需要同时执行多个任务&#xff0c;例如网络服务器&#xff0c;图形图像处理&#xff0c;模拟程序等。使用多线程可以让程序同时执行多个部分&#xff0c;从而显著提高程序的执行速度、响应速度。 充分利用 …

CompletableFuture 线程编排

一、前言 Java8 新特性之一&#xff0c;其实现了Future<T>, CompletionStage<T>两接口&#xff0c;后者是对前者的一个扩展&#xff0c;增加了异步回调、流式处理、多个Future组合处理的能力&#xff0c;使 Java 在处理多任务的协同工作时更加顺畅便利。 二、Compl…

POST请求与GET请求的区别

POST请求 &#xff08;提交数据&#xff0c;一般用于将数据发给服务器&#xff0c;用于修改和写入数据&#xff09; 1、传参方式&#xff1a;相对安全&#xff0c;入参在request body中&#xff0c;可通过各种抓包工具获取 2、缓存&#xff1a;不会被缓存&#xff0c;保存在服…

基于Qt的嵌入式GUI开发指南(一)

Qt 是一个跨平台的应用程序开发框架&#xff0c;用于创建高性能、可扩展和用户友好的图形用户界面&#xff08;GUI&#xff09;应用程序。它提供了丰富的工具、库和功能&#xff0c;使开发者能够轻松地构建各种类型的应用程序&#xff0c;包括桌面应用程序、移动应用程序和嵌入…

Bellhop 从入门到上手

文章目录 前言一、Bellhop 简介二、Bellhop 结构1、输入文件2、输出文件 三、Bellhop 环境文件1、OPTIONS12、OPTIONS23、OPTIONS34、OPTIONS45、其他参数 四、BELLHOP&#xff08;Matlab_GUI&#xff09;实例1、bellhop 工具箱自取2、解压缩工具箱3、设置路径4、添加并包含子文…