数据结构(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身份认证过程

    背景 最近有一些hersql的用户希望能支持mysql的caching_sha2_password认证方式,caching_sha2_password与常用的mysql_native_password认证过程差异还是比较大的,因此抽空研究了一下caching_sha2_password身份认证过程,并为hersql支持了caching_sha2_passwo…

    2025 年 1 月 14 日
    43200
  • Java Dubbo 面试题

    谈谈你理解的Dubbo? Dubbo是一个高性能的Java RPC框架,它提供了服务的注册、发现、调用以及监控等功能,使得开发者可以方便地构建分布式系统和服务化架构。 服务治理:Dubbo提供了一套服务治理的解决方案,包括服务的注册、发现、负载均衡、容错和监控等。 高性能:Dubbo支持多种协议,如Dubbo协议、RMI协议、HTTP协议等,其中Dubbo协…

    未分类 2025 年 1 月 15 日
    60200
  • Python深度学习(第2版)PDF免费下载

    适读人群 :想要学习深度学习的学生、职业开发者。 流行深度学习框架Keras之父执笔,涵盖Transformer架构等进展,文字生,简单方式解释复杂概念,不用一个数学公式,利用直觉自然入门深度学习。 电子版仅供预览,下载后24小时内务必删除,支持正版,喜欢的请购买正版书籍 点击原文去下载 书籍信息 作者: [美] 弗朗索瓦·肖莱出版社: 人民邮电出版社出品方…

    2024 年 12 月 31 日
    37000
  • 岁月如歌,深流静淌

    转眼间,毕业已近六载。记得2011年8月,那个炎热的夏日,我从江西赣州信丰火车站匆忙登上了北上的列车。不知这是命运的逃离还是上天的眷顾,那是我第一次离家如此遥远。如今重返南方,每日奔波于工作与生活之间,看似忙碌却又仿佛无声无息。记忆中的学生时代,老师们的话语犹在耳边。高中时,老师说高考是千军万马的指挥棒;初中时,老师说中考是踏入大学门槛的关键;小学时,老师既…

    未分类 2025 年 5 月 19 日
    35200
  • python SQLAlchemy ORM——从零开始学习 01 安装库

    01基础库 1-1安装 依赖库:sqlalchemy “`python pip install sqlalchemy #直接安装即可 “` 1-2导入使用 这里讲解思路【个人的理解】,具体写其实就是这个框架: 导入必要的接口【有创建engine以及declarative_base】 通过create_engine接口创建engine,根据翻译可以翻译成引…

    2025 年 1 月 12 日
    40600

发表回复

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

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

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

关注微信