数据结构(Java版)第五期:ArrayList与顺序表(下)

目录

一、数组实现顺序表

在探讨顺序表的实现时,我们通常会想到数组这一基础数据结构。本文将通过一个简单的例子,展示如何使用数组来构建一个顺序表,并实现其基本操作。

public class MyArrayList {
    private int[] arr;
    private int size; // 记录有效元素的数量

    // 构造函数,初始化数组容量
    public MyArrayList(int capacity) {
        arr = new int[capacity];
    }
}

在上述代码中,我们定义了一个名为MyArrayList的类,它使用一个整型数组arr来存储元素,并用一个size变量来追踪当前有效元素的数量。

接下来,我们将实现一系列方法,以支持顺序表的基本操作,包括增加、删除、查找和修改元素。

// 返回顺序表中元素的数量
public int size() {
    return size;
}

// 在顺序表末尾添加一个新元素
public void add(int val) {
    if (size == arr.length) {
        resize();
    }
    arr[size++] = val;
}

// 在指定位置插入一个新元素
public void add(int index, int val) {
    if (index < 0 || index > size) {
        throw new IndexOutOfBoundsException("Index out of bounds");
    }
    if (size == arr.length) {
        resize();
    }
    for (int i = size; i > index; i--) {
        arr[i] = arr[i - 1];
    }
    arr[index] = val;
    size++;
}

// 根据下标获取元素
public int get(int index) {
    if (index < 0 || index >= size) {
        throw new IndexOutOfBoundsException("Index out of bounds");
    }
    return arr[index];
}

// 根据下标设置元素
public void set(int index, int val) {
    if (index < 0 || index >= size) {
        throw new IndexOutOfBoundsException("Index out of bounds");
    }
    arr[index] = val;
}

// 删除指定值的第一个元素
public void delete(int val) {
    int index = indexOf(val);
    if (index != -1) {
        remove(index);
    }
}

// 根据下标删除元素
public void remove(int index) {
    if (index < 0 || index >= size) {
        throw new IndexOutOfBoundsException("Index out of bounds");
    }
    for (int i = index; i < size - 1; i++) {
        arr[i] = arr[i + 1];
    }
    size--;
}

// 检查元素是否存在于顺序表中
public boolean contains(int val) {
    for (int i = 0; i < size; i++) {
        if (arr[i] == val) {
            return true;
        }
    }
    return false;
}

// 查找元素的索引
public int indexOf(int val) {
    for (int i = 0; i < size; i++) {
        if (arr[i] == val) {
            return i;
        }
    }
    return -1;
}

// 清空顺序表
public void clear() {
    size = 0;
}

// 将顺序表转换为字符串形式,便于打印
@Override
public String toString() {
    StringBuilder stringBuilder = new StringBuilder();
    stringBuilder.append("[");
    for (int i = 0; i < size; i++) {
        stringBuilder.append(arr[i]);
        if (i < size - 1) {
            stringBuilder.append(", ");
        }
    }
    stringBuilder.append("]");
    return stringBuilder.toString();
}

// 私有方法,用于扩容
private void resize() {
    int[] newArr = new int[(int) (arr.length * 1.5)];
    for (int i = 0; i < size; i++) {
        newArr[i] = arr[i];
    }
    arr = newArr;
}

现在,我们已经实现了一个基本的顺序表类MyArrayList,它包含了添加、删除、查找和修改元素的方法。接下来,我们将通过一个简单的测试来验证我们的实现。

public static void test() {
    MyArrayList list = new MyArrayList(10);
    list.add(1);
    list.add(2);
    list.add(3);
    list.add(4);
    System.out.println("Size: " + list.size());
    System.out.println("List: " + list);
}

public static void main(String[] args) {
    test();
}

通过上述测试代码,我们可以验证MyArrayList类的功能是否符合预期。这个简单的实现展示了如何使用数组来构建一个顺序表,并提供了基本的操作接口。

文章整理自互联网,只做测试使用。发布者:Lomu,转转请注明出处:https://www.it1024doc.com/4679.html

(0)
LomuLomu
上一篇 2024 年 12 月 28 日 上午10:57
下一篇 2024 年 12 月 28 日

相关推荐

  • Discord技术架构调研(IM即时通讯技术架构分析)

    一、目标 调研 discord 的整体架构,发掘可为所用的设计思想 二、调研背景 Discord作为目前比较火的一个在线聊天和语音通信平台且具有丰富的功能。另外其 “超级”群 概念号称可支持百万级群聊 以及 永久保留用户聊天记录。探究其相关技术架构与技术实现 三、产品介绍 目前广泛使用的在线聊天和语音通信平台。最初于2015年发布,旨在为游戏社区提供一个交流…

    2025 年 1 月 12 日
    57100
  • MySQL连接IDEA(Java Web)保姆级教程

    第一步:新建项目(File)->Project 第二步:New Project(JDK最好设置1.8版本与数据库适配,详细适配网请到MySQL官网查询MySQL :: MySQL 8.3 Reference Manual :: Search Results) 第三步:点中MySQLTest(项目名)并连续双击shift键->搜索Add Framework S…

    2025 年 1 月 15 日
    64000
  • JavaScript 延迟加载的方法( 7种 )

    JavaScript脚本的延迟加载(也称为懒加载)是指在网页的主要内容已经加载并显示给用户之后,再加载或执行额外的JavaScript代码。这样做可以加快页面的初始加载速度,改善用户体验,并减少服务器的压力。 以下是几种常见的延迟加载JavaScript的方法: defer 属性: 使用 async 属性: async 属性告诉浏览器立即开始下载脚本,并且在…

    2025 年 1 月 19 日
    50600
  • 详解:订单履约系统规划

    大家好,我是汤师爷~ 什么是订单履约系统? 订单履约是从消费者下单支付到收到商品的全流程管理过程,包括订单接收、订单派单、库存分配、仓储管理和物流配送等环节,核心目标是确保商品准时、准确地送达消费者手中。 通过订单履约系统,消费者可以实时了解商品的物流状态和预计送达时间,并可以根据需求选择同城配送、快递或自提等多样化的履约方式。 对商家而言,订单履约系统可以…

    2025 年 1 月 14 日
    56600
  • java: JDK isn‘t specified for module ‘product-service‘问题解决

    目录 问题 解决方法 1.打开File->Project Structure… 2.将Project SDK修改为17 Oracle OpenJDK 17.0.12,并Apply,OK 问题 添加module后报错:java: JDK isn’t specified for module ‘product-service’ 查看pom.xml文件也添加了…

    2025 年 1 月 11 日
    56000

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信