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

相关推荐

  • Claude Pro订阅流程订阅开通教程

    Claude Pro订阅流程订阅开通教程,整理国内用户用微信支付宝完成Claude Pro充值、订阅和代充的操作流程。

    未分类 2026 年 6 月 29 日
    8900
  • Claude Pro代充自己账号开通

    国内用户开通Claude Pro的国内可用说明,保留Claude充值、Claude代充和Organization ID确认流程,适合需要微信支付宝付款的用户。

    未分类 2026 年 6 月 2 日
    13800
  • 履约系统:发货单、配送单模型设计详解

    大家好,我是汤师爷~ 概念模型设计是系统开发的关键步骤,它能帮助我们厘清业务逻辑并定义核心实体。我们将从订单履约的基本概念入手,深入探讨各实体间的关系。 履约域核心概念模型 如图展示了履约域的核心概念模型。 1、发货单 发货单是订单履约过程中的重要执行单据,它将订单转化为具体的发货任务。门店和仓储部门通过发货单进行拣货、打包并安排物流服务商发货。发货单确保货…

    2024 年 12 月 31 日
    58100
  • ChatGPT Plus自己账号代充开通指南详细版

    想用自己的 ChatGPT 账号升级 Plus,最现实的问题通常是支付方式。国内用户更希望用微信或支付宝完成购买,再确认会员开到自己的原账号。 对普通用户来说,这比准备海外支付工具更容易理解。

    未分类 2026 年 6 月 7 日
    13400
  • ChatGPT Plus无需国外信用卡代充教程

    很多人已经有 ChatGPT 账号,但到了开通 Plus 时才发现,真正麻烦的不是登录,而是付款方式。国内用户如果没有海外信用卡,官方订阅页面往往不太好处理;再去研究虚拟卡、礼品卡或共享账号,又会多出不少额外步骤。ChatGPT Plus无需国外信用卡代充教程 这类需求,本质上就是想把会员开到自己的原账号里,同时用国内更熟悉的支付方式完成。

    未分类 2026 年 6 月 29 日
    7500

发表回复

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

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

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

关注微信