数据结构(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 日

相关推荐

  • MySQL 安装部署

    概述 本文主要介绍如何在 Linux 中以 RPM 包的方式安装 MySQL 并进行相关的初始化配置,文中方案均已实践验证。 操作系统 CentOS 7.6 数据库版本 MySQL 8.4.3 LTS [!NOTE] 说明 本文主要介绍 RPM 包的安装方式,其他安装方法可查阅官网:MySQL :: MySQL 8.4 Reference Manual ::…

    未分类 2025 年 1 月 11 日
    39300
  • IntelliJ IDEA 2024激活破解详细教程(IDEA永久激活码)

    IntelliJ IDEA 是一款广受欢迎的 Java 集成开发环境,以其智能代码助手、代码自动提示和强大的重构功能闻名。然而,对于一些开发者来说,其高昂的订阅费用可能是个不小的负担。本文将介绍一种通过脚本激活 IDEA 的方法,帮助大家免费使用这款强大的开发工具。 一、准备工作 1. 下载并安装最新版本的 IDEA 首先,前往 JetBrains 官网下载…

    未分类 2024 年 6 月 23 日
    2.2K00
  • Java Bean的核心概念与应用解析

    Java Bean是遵循特定编码标准的Java类,其核心作用在于数据封装,并体现约定优先于配置的设计理念。它在企业级开发(如Spring生态)和图形界面开发(如传统Swing组件)中具有重要地位,是Java编程中广泛采用的基础模式。 Java Bean的核心特性 默认构造方法不可少 反射机制(例如Spring框架初始化对象)依赖无参构造器完成实例化 若存在带…

    未分类 2025 年 5 月 18 日
    23800
  • 深度解读 JDK 8、JDK 11、JDK 17 和 JDK 21 的区别

    “`markdown 随着Java生态系统的持续发展,每个新发布的JDK版本都带来了众多新特性、改进和性能优化。对于Java开发者来说,掌握这些不同版本间的差异对于在项目中选择最合适的JDK版本至关重要。本文将深入探讨JDK 8、JDK 11、JDK 17和JDK 21之间的主要差异,帮助你洞察每个版本的变化及其对开发实践的影响。 一、JDK 8:Java…

    未分类 2024 年 12 月 27 日
    68600
  • Java开发环境搭建全指南:从下载安装到配置验证

    目录 第一步:获取与安装JDK 第二步:设置系统环境 第三步:检查配置结果 第一步:获取与安装JDK 1、官方下载入口访问Oracle官网Java下载页面:https://www.oracle.com/java/technologies/downloads/2、根据需求选择适合的版本,并匹配操作系统类型3、下载完成后,运行安装程序并按照向导操作4、建议修改默…

    2025 年 5 月 19 日
    54600

发表回复

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

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

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

关注微信