iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java实现顺序表的操作详解
  • 773
分享到

Java实现顺序表的操作详解

2024-04-02 19:04:59 773人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录一、顺序表是什么二、自定义异常空引用异常下标越界异常三、顺序表的方法顺序表的实现获取顺序表长度顺序表是否为空顺序表是否为满打印顺序表末尾新增元素指定位置新增元素判断是否包含某元素

一、顺序表是什么

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

数组不就是一个现场的顺序表吗?但是数组并没有直接向我们提供增删查改的工具,所以我们必须重新实现一下顺序表。

二、自定义异常

空引用异常

如果我们的顺序表为空时,手动抛出空引用异常

public class NullException extends RuntimeException{
    public NullException(String message) {
        super(message);
    }
}

下标越界异常

当我们进行增删查改时,下标越界时,我们手动抛出一个下标越界异常

public class IndexException extends RuntimeException{
    public IndexException(String message) {
        super(message);
    }
}

三、顺序表的方法

顺序表的实现

这里我们定义一个顺序表,默认容量为DEFAULTSIZE,实际大小为usedsize.

public class ArrList {
    public int[] arr;
    public int usedSize;
    public static final int DEFAULTSIZE = 10;

    public ArrList() {
        this.arr = new int[DEFAULTSIZE];
    }
}

获取顺序表长度

usedSize存储的就是当前顺序表的长度,直接返回即可。

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

顺序表是否为空

此方法我们只想在顺序表内部使用,所以我们定义为private.

private boolean isEmpty() {
        return this.arr == null;
    }

顺序表是否为满

此方法我们只想在顺序表内部使用,所以我们定义为private.

private boolean isFull() {
        //如果数组所放元素大于等于数组长度,那么数组满了
        return this.size() >= this.arr.length;
    }

打印顺序表

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

末尾新增元素

public void add(int data) throws NullException{
        //1.数组为空,报空异常
        if(isEmpty()) {
            throw new NullException("数组为空");
        }
        //2.数组满了,先增容
        if(isFull()) {
            this.arr = new int[2 * this.arr.length];
        }
        //3.进行新增
        this.arr[this.usedSize] = data;
        //4.元素+1
        this.usedSize++;
    }

指定位置新增元素

public void add(int pos, int data) throws RuntimeException,IndexException{
        //1.判断数组是否为空
        if(isEmpty()) {
            throw new NullException("数组为空");
        }
        //2.判断新增位置是否合法,抛数组越界异常
        if(pos < 0 || pos > this.arr.length) {
            throw new IndexException("数组越界");
        }
        //3.判断数组是否已满,进行扩容
        if(isFull()) {
            this.arr = new int[2 * this.arr.length];
        }
        //4.进行新增
        for (int i = this.usedSize - 1; i >= pos; i--) {
            this.arr[i+1] = this.arr[i];
        }
        this.arr[pos] = data;
        this.usedSize++;
    }

判断是否包含某元素

public boolean contains(int toFind) {
        for (int i = 0; i < this.usedSize; i++) {
            if(toFind == this.arr[i]) {
                return true;
            }
        }
        return false;
    }

查找某个元素对应的位置

public int indexOf(int toFind) {
        for (int i = 0; i < this.usedSize; i++) {
            if(toFind == this.arr[i]) {
                return i;
            }
        }
        return -1; 
    }

获取 pos 位置的元素

 public int get(int pos) throws IndexException{
        //判断pos位置是否合法
        if(pos < 0 || pos >= this.usedSize) {
            throw new IndexException("输入pos位置数组越界");
        }else {
            return this.arr[pos];
        }
    }

给 pos 位置的元素赋值

public void set(int pos, int value) throws NullException,IndexException{
        if(isEmpty()) {
            throw new NullException("数组为空");
        }
        //2.判断新增位置是否合法,抛数组越界异常
        if(pos < 0 || pos >= this.arr.length) {
            throw new IndexException("数组越界");
        }
        this.arr[pos] = value;
    }

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

public void remove(int toRemove) throws NullException{
        if(isEmpty()) {
            throw new NullException("数组为空");
        }
        int ret = indexOf(toRemove);
        if(ret == -1) {
            System.out.println("不存在此数");
            return;
        }
        if(ret != -1) {
            for (int i = ret; i < this.usedSize - 1; i++) {
                this.arr[i] = this.arr[i+1];
            }
        }
        this.usedSize++;
    }

清空顺序表

   public void clear() {
        this.usedSize = 0;
        //如果为引用类型
//        for (int i = 0; i < size(); i++) {
//            this.arr[i] = null;
//        }
//        this.usedSize = 0;
    }
}

四、自定义顺序表

public class ArrList {
    public int[] arr;
    public int usedSize;
    public static final int DEFAULTSIZE = 10;

    public ArrList() {
        this.arr = new int[DEFAULTSIZE];
    }
    // 打印顺序表
    public void display() {
        for (int i = 0; i < this.usedSize; i++) {
            System.out.print(arr[i]+" ");
        }
        System.out.println();
    }
    // 新增元素,默认在数组最后新增
    public void add(int data) throws NullException{
        //1.数组为空,报空异常
        if(isEmpty()) {
            throw new NullException("数组为空");
        }
        //2.数组满了,先增容
        if(isFull()) {
            this.arr = new int[2 * this.arr.length];
        }
        //3.进行新增
        this.arr[this.usedSize] = data;
        //4.元素+1
        this.usedSize++;
    }
    private boolean isFull() {
        //如果数组所放元素大于等于数组长度,那么数组满了
        return this.size() >= this.arr.length;
    }
   private boolean isEmpty() {
        return this.arr == null;
    }
    // 在 pos 位置新增元素
    public void add(int pos, int data) throws RuntimeException,IndexException{
        //1.判断数组是否为空
        if(isEmpty()) {
            throw new NullException("数组为空");
        }
        //2.判断新增位置是否合法,抛数组越界异常
        if(pos < 0 || pos > this.arr.length) {
            throw new IndexException("数组越界");
        }
        //3.判断数组是否已满,进行扩容
        if(isFull()) {
            this.arr = new int[2 * this.arr.length];
        }
        //4.进行新增
        for (int i = this.usedSize - 1; i >= pos; i--) {
            this.arr[i+1] = this.arr[i];
        }
        this.arr[pos] = data;
        this.usedSize++;
    }
    // 判定是否包含某个元素
    public boolean contains(int toFind) {
        for (int i = 0; i < this.usedSize; i++) {
            if(toFind == this.arr[i]) {
                return true;
            }
        }
        return false;
    }
    // 查找某个元素对应的位置
    public int indexOf(int toFind) {
        for (int i = 0; i < this.usedSize; i++) {
            if(toFind == this.arr[i]) {
                return i;
            }
        }
        return -1;
    }
    // 获取 pos 位置的元素
    public int get(int pos) throws IndexException{
        //判断pos位置是否合法
        if(pos < 0 || pos >= this.usedSize) {
            throw new IndexException("输入pos位置数组越界");
        }else {
            return this.arr[pos];
        }
    }
    // 给 pos 位置的元素设为 value
    public void set(int pos, int value) throws NullException,IndexException{
        if(isEmpty()) {
            throw new NullException("数组为空");
        }
        //2.判断新增位置是否合法,抛数组越界异常
        if(pos < 0 || pos >= this.arr.length) {
            throw new IndexException("数组越界");
        }
        this.arr[pos] = value;
    }
    //删除第一次出现的关键字key
    public void remove(int toRemove) throws NullException{
        if(isEmpty()) {
            throw new NullException("数组为空");
        }
        int ret = indexOf(toRemove);
        if(ret == -1) {
            System.out.println("不存在此数");
            return;
        }
        if(ret != -1) {
            for (int i = ret; i < this.usedSize - 1; i++) {
                this.arr[i] = this.arr[i+1];
            }
        }
        this.usedSize++;
    }
    // 获取顺序表长度
    public int size() {
        return this.usedSize;
    }
    // 清空顺序表
    public void clear() {
        this.usedSize = 0;
        //如果为引用类型
//        for (int i = 0; i < size(); i++) {
//            this.arr[i] = null;
//        }
//        this.usedSize = 0;
    }
}

以上就是Java实现顺序表的操作详解的详细内容,更多关于Java顺序表的资料请关注编程网其它相关文章!

--结束END--

本文标题: Java实现顺序表的操作详解

本文链接: https://www.lsjlt.com/news/167866.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java实现顺序表的操作详解
    目录一、顺序表是什么二、自定义异常空引用异常下标越界异常三、顺序表的方法顺序表的实现获取顺序表长度顺序表是否为空顺序表是否为满打印顺序表末尾新增元素指定位置新增元素判断是否包含某元素...
    99+
    2024-04-02
  • Java实现顺序表的操作
    本文实例为大家分享了Java实现顺序表的基本操作,供大家参考,具体内容如下 静态顺序表:使用定长数组存储。动态顺序表:使用动态开辟的数组存储。 接口 package com.gith...
    99+
    2024-04-02
  • C语言实现顺序表的全操作详解
    目录线性表顺序表顺序表接口实现1.顺序表初始化2.顺序表空间增容3.顺序表打印4.尾插数据5.尾删数据6.头插数据7.头删数据8.在pos下标处插入数据9.删除pos下标处数据10....
    99+
    2024-04-02
  • Java 3:顺序表的操作
    顺序表常见操作有插入、删除、查找、修改。一、插入:1.插入有头插、尾插、任意位置插入。在插入时要注意下标的取值在顺序表长度范围内。所以最好在插入之前进行扩容操作。2.在头插时要注意先将原数组的元素从后往前依次向后移动。因为如果从前往后开始移...
    99+
    2023-01-31
    顺序 操作 Java
  • 如何使用Java实现顺序表的操作
    小编给大家分享一下如何使用Java实现顺序表的操作,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体内容如下静态顺序表:使用定长数组存储。动态顺序表:使用动态开辟...
    99+
    2023-06-28
  • C++顺序表的基本操作实现
    目录1.顺序表的定义2.顺序表上基本操作的实现完整代码如下:总结1.顺序表的定义 线性表的顺序存储又称顺序表。它是用一组地址连续的存储单元依次存储线性表中的数据元素,从而使得逻辑上相...
    99+
    2024-04-02
  • C语言实现顺序表的基本操作的示例详解
    目录一、认识顺序表1.线性表2.顺序表的概念及结构二、顺序表的基本操作(接口实现)1.初始化顺序表2.打印顺序表3.尾插4.尾删5.扩容6.头插7.头删8.任意位置插入9.任意位置删...
    99+
    2022-11-13
    C语言顺序表基本操作 C语言顺序表操作 C语言顺序表
  • C语言怎么实现顺序表的操作
    这篇文章主要介绍了C语言怎么实现顺序表的操作的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言怎么实现顺序表的操作文章都会有所收获,下面我们一起来看看吧。线性表线性表(linear list)是n个具有相同特...
    99+
    2023-06-30
  • Java数据结构的顺序表怎么操作
    这篇文章主要介绍了Java数据结构的顺序表怎么操作的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java数据结构的顺序表怎么操作文章都会有所收获,下面我们一起来看看吧。前言线性表(linear list)是n个...
    99+
    2023-06-29
  • C语言超详细讲解顺序表的各种操作
    目录顺序表是什么顺序表的结构体顺序表的接口函数顺序表相关操作的菜单顺序表的初始化添加元素陈列元素往最后加元素往前面加元素任意位置加元素删除最后元素删除前面元素 删除任意元素...
    99+
    2024-04-02
  • C++实现数据结构的顺序表详解
    目录前言:代码1.SeqList.h2.SeqList.cpp3.test.cpp总结 前言: hello,大家好,这篇文章博主来分享一下C++实现数据结构中的顺序表的代码。希望对大...
    99+
    2024-04-02
  • C语言实现顺序表的基本操作指南(注释很详细)
    目录创建一个结构体用于存放顺序表相关数据初始化顺序表插入元素先检查容量是否够用删除元素元素修改查找元素排序元素元素反转源码SeqList.ctest.cSeqList.h总结创建一个...
    99+
    2024-04-02
  • C语言实现动态顺序表详解
    目录什么是顺序表?1. 定义顺序表结构体:2. 初始化顺序表:3. 销毁顺序表:4. 打印顺序表:5. 判断容量+扩容:6. 头插数据:7. 尾插数据:8. 指定下标位置插入...
    99+
    2024-04-02
  • Java线性表的顺序表示及实现
    目录前言一、什么是顺序表?二、顺序表的实现1. 准备工作2. 获取顺序表的元素个数3. 获取顺序表当前的容量4. 顺序表是否为空5. 在指定索引位置添加元素6. 在顺序表末尾添加元素...
    99+
    2024-04-02
  • Java 精炼解读数据结构的顺序表如何操作
    目录前言一、什么是顺序表顺序表的概念及结构创建顺序表打印顺序表获取顺序表长度在pos位置新增元素判定是否包含某个元素查找某个元素对应的位置获取 pos 位置的元素给 pos 位置的元...
    99+
    2024-04-02
  • 怎么用Java实现顺序表
    这篇文章给大家分享的是有关怎么用Java实现顺序表的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、什么是顺序表?顺序表就是按照顺序存储方式存储的线性表,该线性表的结点按照逻辑次序依次存放在计算机的一组连续的存储...
    99+
    2023-06-27
  • Java实现顺序表和链表结构
    目录前言:顺序表定义:实现方法:代码实现:链表定义:分类:实现方法:代码实现:顺序表 & 链表总结前言: 线性表(linear list)是n个具有相同特性的数据元素的有限序...
    99+
    2024-04-02
  • Java顺序表和链表如何实现
    这篇“Java顺序表和链表如何实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java顺序表和链表如何实现”文章吧。1. ...
    99+
    2023-07-04
  • Java如何实现一个顺序表
    这篇文章主要介绍Java如何实现一个顺序表,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!实现一个顺序表接口实现定义一个MyArrayList类,在类中实现以下函数public class MyAr...
    99+
    2023-06-14
  • Java数据结构顺序表的详细讲解
    目录写在前面1.线性表2.顺序表的实现2.1增加数据2.1.1尾部增加数据2.1.2任意位置增加数据2.2查找数据2.3删除数据2.4修改数据3.ArrayList3.1ArrayL...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作