实现一个顺序表

接口实现

定义一个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顺序表

Java实现一个顺序表的完整代码的更多相关文章

  1. Java DriverManager.getConnection()获取数据库连接

    DriverManager.getConnection一共有四个重载方法,前三个由public修饰,用来获取不同类型的参数,这三个getConnection实际相当于一个入口,他们最终都会return第四个私有化的getConnection方法,最终向第四个私有化方法的传入参数都是url,java.......

  2. 讲讲Java8的Optional类

    前言Java 8中引入了 Optional 类来解决 NullPointerException 与繁琐的 null 检查,该类首次出现在 Guava。Java 8 才成为类库中的一部分。入门Optional 是一个封装值的类,用于保存类型为 T 的值;本质上,Optional 就是一个容器。举例来说......

  3. Java并发包源码学习系列:阻塞队列实现之SynchronousQueue源码解析

    目录SynchronousQueue概述 使用案例 类图结构 put与take方法 void put(E e) E take() Transfer 公平模式TransferQueue QNode transfer awaitFulfill tryCancel clean TransferQueue总......

  4. java实现打印日历

    本文实例为大家分享了java实现打印日历的具体代码,供大家参考,具体内容如下效果图代码:/***需要实现的目标:根据输入的年月打印出本月的日历表*说明:1900年1月1日刚好是星期一,所以需要计算出从1900 年到当前年月的前一个月总*共经历了几天,然后根据每周七天,用总天数除以7取余数,此余数就是......

  5. Java中的权限修饰符(protected)示例详解

    前言大部分来自:https://blog.csdn.net/justloveyou_/article/details/61672133。并在这个博客的基础上,加上了自己的一些理解。权限控制表修饰词本类同一个包的类继承类其他类private√×××无(默认)√√×......

  6. Java多线程实现简易微信发红包的方法实例

    一、首先我们先大致了解一下什么是多线程。(书上的解释)程序是一段静态的代码,它是应用软件的蓝本。进程是程序的一次动态执行过程,对应了从代码加载执行,执行到执行完毕的一个完整的过程。线程不是进程,线程是比进程更小的执行单位,一个进程在其执行过程中,可以产生多个线程形成多条执行线索,每条线索即每个线程也......

  7. java中Optional的使用详细解析

    Optional的使用详解1、Optional介绍 Optional 类是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。Optional 是个容器:它可以保存类型T的值,或者仅仅保存null。Optional提供很多有用的方法......

  8. Java是"按引用传递"还是"按值传递"

    我一直认为Java使用传递引用。但是,我看过几篇博客文章,声称不是(博客文章中说Java使用值传递)。我不认为我能理解他们的区别。有什么解释?解决方案Java总是按值传递。不幸的是,我们根本不处理任何对象,而是处理称为引用(当然是通过值传递)的对象句柄。选择的术语和语义很容易使许多初学者感到困惑。它......

  9. java完美封装微信模板消息的发送动态

    导入maven依赖<dependency><groupId>org.dom4j</groupId><artifactId>dom4j</artifactId><version>2.1.1</version></......

  10. Java中的深浅拷贝问题,你清楚吗?

    一、前言拷贝这个词想必大家都很熟悉,在工作中经常需要拷贝一份文件作为副本。拷贝的好处也很明显,相较于新建来说,可以节省很大的工作量。在Java中,同样存在拷贝这个概念,拷贝的意义也是可以节省创建对象的开销。Object类中有一个方法clone(),具体方法如下:protected native Ob......

随机推荐

  1. MySql8 WITH RECURSIVE递归查询父子集的方法

    背景开发过程中遇到类似评论的功能是,需要时用查询所有评论的子集。不同数据库中实现方式也不同,本文使用Mysql数据库,版本为8.0Oracle数据库中可使用START [Param] CONNECT BY PRIORMysql 中需要使用 WITH RECURSIVE需求找到name为张三的孩子和孙......

  2. java DelayQueue的原理浅析

    在对DelayQueue延迟功能的使用上,很多人不能后完全理解延迟的一些功能使用,这里我们深入来挖掘一下DelayQueue的原理。下面将从构造方法、接口、继承体系三个方面进行分析,需要注意的是,相较于其它的阻塞队列,DelayQueue因为延迟的功能多了接口的使用,一起来看具体内容。1.构造方法p......

  3. CocosCreator如何实现划过的位置显示纹理

    1、项目需求项目需要有一个功能:是当一个光点走过的路径,这个路径的位置就都亮起来的功能。2、资料内容功能类似这位大神的橡皮擦功能:https://forum.cocos.org/t/2-0-8/74246但是,项目的需求还要经过的路径周围有模糊的外边——也就是从中心到边缘越来越暗。所以对于借鉴了网上......

  4. synchronized详解

    synchronized是Java多线程中元老级的锁,也是面试的高频考点,让我们来详细了解synchronized吧。在Java中,synchronized锁可能是我们最早接触的锁了,在 JDK1.5之前synchronized是一个重量级锁,相对于juc包中的Lock,synchronized显得......

  5. asp取整数mod 有小数的就自动加1

    有一位同学问我一个问题:asp程序,有一个不确定的数除以10,结果需要用asp程序处理取整数,如果有小数点就自动加1这个问题有两个解决思路,如果用在分页上,rs的属性pagecount就可以轻松实现,另外一种方法是数学判断方法。现在做分别介绍。除法分页方法rs.pagesize = 10这个代表每页......

  6. MySQL 权限控制细节分析

    今天周天,早上懒了一会儿,起的有点儿晚,中午没事儿干,重新看了看MySQL里面的权限控制模块,再次回头看,还是有很多收获的细节,这里记录一下,方便自己后续查看。 关于权限部分的内容,之前3月11号的文章中有写过一些,今天的内容,我们使用一个一个的细节知识点来撰写(本文中所使用的My......

  7. java实现打印日历

    本文实例为大家分享了java实现打印日历的具体代码,供大家参考,具体内容如下效果图代码:/***需要实现的目标:根据输入的年月打印出本月的日历表*说明:1900年1月1日刚好是星期一,所以需要计算出从1900 年到当前年月的前一个月总*共经历了几天,然后根据每周七天,用总天数除以7取余数,此余数就是......

  8. 教你如何用python开发一款数字推盘小游戏

    今年年初,新一季的《最强大脑》开播了,第一集选拔的时候大家做了一个数字游戏,名叫《数字华容道》,当时何猷君以二十几秒的成绩夺得该项目的冠军,看了这个游戏之后我决定要写一个《数字华容道》的程序,过去了半年,我终于记起了这件事,今天就来实现。数字推盘游戏(n-puzzle)是一种智力游戏,常见的类型有十......

  9. Python解析JSON对象的全过程记录

    前言本章节我们将为大家介绍如何使用 Python 语言来编码和解码 JSON 对象。json处理模块的主要任务,是将一个JSON对象,转换成Python数据类型数据进行处理,或者反之,将Python数据类型数据,转换成JSON对象(字符串流),在不同的模块或者系统间传输。1. JSON数据格式特点对......

  10. Python合并Excel表(多sheet)的实现

    使用xlrd模块和xlwt模块解题思想:xlwt模块是非追加写.xls的模块,所以要借助for循环和列表,来一次性写入,这样就没有追加与非追加的说法。而合并Excel表,把每个Excel表当做行,即行合并,换一种想法,把Excel表中的标签当做列,可进行列合并,即合并不同文件中相同标签组成的不同标签......