数据结构ds之动态数组

本文介绍了动态数组的特点,即在基本数组基础上封装到类中,当数组长度不够时自动扩容。文章详细阐述了如何设计一个动态数组,包括创建接口、实现接口并覆盖一系列操作方法,如添加元素、获取元素、设置元素、删除元素等。此外,还讨论了动态数组在线性表(List)中的位置,将其与链表区分开来。
摘要由CSDN通过智能技术生成

一、动态数组的特点

基本数组的特点: 保存的单个相同类型的元素,一旦声明一个原始数组,无论采用哪种实例化方式,最终数组一旦定义,长度固定!

由于原始数组存在的定长问题,因此,需要将原始数组做扩充,将原始数组封装到自定义的类中,让阿提具备可扩展的能力----对于使用者来说,用户无须关心数组的长度问题,提供给用户的数组是一个动态数组,用户只需要使用提供的数组进行更删改查即可,无须关心数组的越界问题~~~

本质: 将原始的数组封装到类中,对用户淡化数组长度的概念,当数组长度不够时,类的内部自己进行扩容操作,对用户透明~~

动态数组 = 基本数组封装到类中 + 对外提供一系列的方便进行增删改查的方法

线性表(List)是线性结构的一种典型实现,它又可以分为:顺序表(SeqList)和链表(LinkList)二大类.

二、设计一个动态数组

1、先写一个接口,用来方便修改具体的子类。
// 首先定义一个顺序表接口,可以非常方便低成本的修改具体的子类!
public interface SeqList {
   

        // element--元素  向线性表中增加一个元素,默认在尾部。
        void add(int element);
        // 在索引为 index 的位置插入一个元素。
        void add(int index,int element);
        // 查询线性表中是否包含指定元素 element。
        boolean contains(int element);
        // 返回索引处为 index位置的元素值。
        int get(int index);
        // 修改索引处为 index的值,返回修改前的值。
        int set(int index,int newElement);
        // 删除索引为 index处的元素,返回删除之前的元素值。
        int removeIndex(int index);
        // 删除第一个值为 element的元素。
        void removeFirstElement(int element);
        // 删除线性表中所有值为 element的值。
        void removeAllElement(int element);
}
2、定义一个类继承接口(同时需要覆写接口中的所有抽象方法!)

public class MyArrayList implements SeqList {
   
    // 实际存储元素的数组! 对用户是不可见的!
    private int[] array;
    // 实际的元素个数。
    private int size;

    // 数组的默认的初始化长度。
    private static final int default_num = 10;

 	// 无参构造,当用户不知道具体的数组元素个数时,默认为自定义的 default_num = 10;
    public MyArrayList() {
   
        this(default_num);
    }
    
	// 有参构造,当用户知道具体的元素个数时,该数组长度 = 用户自定义的 number;
    public MyArrayList(int number) {
   
        this.array = new int[number];
    }

    @Override
    public void add(int element) {
   

    }

    @Override
    public void add(int index, int element) {
   

    }

    @Override
    public boolean 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KuKudebdw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值