Java实现一个顺序表的完整代码

 更新时间:2021年04月14日 16:31:07   作者:4tong  
顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般采用数组存储。在数组上完成数据的增删减改。顺序表的底层是一个数组

实现一个顺序表

接口实现

定义一个MyArrayList类,在类中实现以下函数

public class MyArrayList {
   
}

数组的定义

public int[] elem;//定义一个整形数组
    public int usize;//usize表示数组的长度
    public MyArrayList(){
        this.elem = new int[5];
}

打印顺序表

for循环打印顺序表的每一位

public void display(){
        for (int i = 0; i < this.usize; i++) {
            System.out.print(this.elem[i]+" ");
        }
        System.out.println();
    }

在pos位置新增元素

先定义一个isFull函数判断顺序表是否满了,满了返回true,没满则返回false

public boolean isFull(){
        if (this.usize == this.elem.length){
            return true;
        }
        return false;
    }

将pos位置后的元素后移,顺序表顺序表长度增加一位

public void add(int pos, int data){
        //判断顺序表是否满了
        if (isFull()){
            System.out.println("顺序表已满");
            //扩容
            this.elem = Arrays.copyOf(this.elem,2*this.usize);
        }
        //判断pos的合法性
        if (pos < 0 || pos > this.usize){
            System.out.println("pos位置不合法");
            return;
        }
        //将pos位置后的数字后移
        for (int i = this.usize-1; i >= pos; i--) {
            this.elem[i+1] = this.elem[i];
        }
        this.elem[pos] = data;
        this.usize++;
    }

判定是否包含某个元素

public boolean contains(int key){
        for (int i = 0; i < this.usize; i++) {
            if (this.elem[i] == key){
                return true;
            }
        }
        return false;
    }

查找某个对应元素的位置

返回它的位置

public int search(int key){
        for (int i = 0; i < this.usize; i++) {
            if (this.elem[i] == key){
                return i;
            }
        }
        return -1;
    }

获取pos位置的元素

定义一个isEmpty函数判断顺序表是否为空

public boolean isEmpty(){
        return this.usize == 0;
    }
public int getPos(int pos){
        //判断顺序表是否为空
        if (isEmpty()){
            return -1;
        }
        //判断pos 位置是否合法
        if (pos < 0 || pos >= this.usize){
            return -1;
        }
        return this.elem[pos];
    }

给pos位置的元素设为value 更新为新的数字

 public void setPos(int pos,int value){
        //判断顺序表是否为空
        if (isEmpty()){
            return;
        }
        //判断pos位置是否合法
        if (pos < 0 || pos >= this.usize){
            return;
        }
        this.elem[pos] = value;
    }

删除第一次出现的关键字key

查找到关键字,从关键字所在的位置开始到顺序表结束每一项前移,覆盖掉关键字,长度减少一位

  public void remove(int key){
        int index= search(key);
        if (key == -1){
            System.out.println("关键字不存在");
            return;
        }
        for (int i = key; i < this.usize-1; i++) {
            this.elem[i] = this.elem[i+1];
        }
        this.usize--;
    }

获取顺序表长度

  public int size(){
        return this.usize;
    }

清空顺序表

顺序表长度直接为0

public void clear(){
        this.usize = 0;
    }

实现这个顺序表

定义一个测试类,测试这些函数的输出

public class TestDemo {
    public static void main(String[] args) {
        MyArrayList myArrayList = new MyArrayList();
        //给这个顺序表写入1,2,3,4,5
        myArrayList.add(0,1);
        myArrayList.add(1,2);
        myArrayList.add(2,3);
        myArrayList.add(3,4);
        myArrayList.add(4,5);
        //打印这个顺序表
        myArrayList.display();
        //判定5这个元素是否在该顺序表中
        System.out.println(myArrayList.contains(5));
        //查找5这个元素 返回它的位置
        System.out.println(myArrayList.search(5));
        //获取3位置的元素
        System.out.println(myArrayList.getPos(3));
        //将4位置的元素重新赋值为9
        myArrayList.setPos(4,9);
        //打印新的顺序表
        myArrayList.display();
        //删除第一次出现的元素4
        myArrayList.remove(4);
        //打印新的顺序表
        myArrayList.display();
        //获取顺序表的长度
        System.out.println(myArrayList.size());
        System.out.println("清空");
        //清空顺序表
        myArrayList.clear();
        //打印新的顺序表
        myArrayList.display();
    }
}

得到结果:

在这里插入图片描述

顺序表的优缺点

优点:顺序表查找方便,知道这个元素的位置就可以直接找到这个元素。
缺点:扩容一般成2倍增长,会有一定的空间浪费。

相关文章

  • Java中的任务调度框架quartz详细解析

    Java中的任务调度框架quartz详细解析

    这篇文章主要介绍了Java中的任务调度框架quartz详细解析,Quartz 是一个完全由 Java 编写的开源作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制,需要的朋友可以参考下
    2023-11-11
  • SpringBoot实现轻量级动态定时任务管控及组件化的操作步骤

    SpringBoot实现轻量级动态定时任务管控及组件化的操作步骤

    文章介绍了一种在SpringBoot中实现动态定时任务的解决方案,基于COLA架构理论,封装到了组件层,该组件支持类级别和方法级别的定时任务注册,并提供了易用性和扩展性,组件使用Maven形式引入,并且可以通过YAML配置文件进行设置,感兴趣的朋友一起看看吧
    2024-11-11
  • Java实现学生信息管理系统(使用数据库)

    Java实现学生信息管理系统(使用数据库)

    这篇文章主要为大家详细介绍了Java实现学生信息管理系统,使用数据库,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • Java中使用Thread类和Runnable接口实现多线程的区别

    Java中使用Thread类和Runnable接口实现多线程的区别

    这篇文章主要介绍了使用Thread类和Runnable接口实现多线程的区别,本文给大家介绍了两种实现方式的步骤,除了以上两种多线程实现方式,还可以使用 Callable 接口实现,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • jstl标签基础开发步骤(详解)

    jstl标签基础开发步骤(详解)

    下面小编就为大家带来一篇jstl标签基础开发步骤(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • 使用spring框架ResponseEntity实现文件下载

    使用spring框架ResponseEntity实现文件下载

    这篇文章主要介绍了使用spring框架ResponseEntity实现文件下载,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • SpringBoot 集成 Nebula的操作过程

    SpringBoot 集成 Nebula的操作过程

    这篇文章主要介绍了SpringBoot 集成 Nebula的操作过程,通过示例代码介绍了java 环境下如何对 Nebula Graph 进行操作,感兴趣的朋友跟随小编一起看看吧
    2024-05-05
  • restemplate请求乱码之content-encoding=“gzip“示例详解

    restemplate请求乱码之content-encoding=“gzip“示例详解

    RestTemplate从Spring3.0开始支持的一个HTTP请求工具,它提供了常见的REST请求方案的模板,及一些通用的请求执行方法 exchange 以及 execute,接下来通过本文给大家介绍restemplate请求乱码之content-encoding=“gzip“,需要的朋友可以参考下
    2024-03-03
  • SpringAOP 如何通过JoinPoint获取参数名和值

    SpringAOP 如何通过JoinPoint获取参数名和值

    这篇文章主要介绍了SpringAOP 通过JoinPoint获取参数名和值的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • SpringBoot与SpringMVC中参数传递的原理解析

    SpringBoot与SpringMVC中参数传递的原理解析

    这篇文章主要介绍了SpringBoot与SpringMVC中参数传递的原理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-07-07

最新评论