ArrayList 动态数组

一、动态数组的引入

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

由此我们为了更方便的使用数组,将原数组做扩充,将原始数组封装到自定义的类中,让他具备可以扩展的能力 —> 这样用户在使用时只需要使用提供的数组进行增删改查即可,无需关心数组的越界问题。

所以:动态数组的本质是将原始的数组封装到类中,堆用户淡化数组长度的概念,数组长度不够时,类的内部会自己进行扩容操作。其存储的内容仍然还在原始数组中。

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

二、动态数组的实现

第一步,动态数组时属于线性表的一种,因此其继承线性表的接口,我们实现该线性表的接口Seqlist

public interface Seqlist{
//向线性表中添加一个元素,默认在尾部添加
void add (int vol);
//在索引为index的位置插入新元素
void add (int index,int vol);
//查询线性表中是否包含指定元素
boolean contains(int vol);
//返回索引为index的值
int get (int index);
//修改索引为index位置的元素的值,返回修改前的元素值
int set(int index,int newVol);
//删除线性表中索引为index的值,返回删除前的元素
int removeByIndex(int index);
//删除第一个值为val的元素
void removeByValueOnce(int val);
//删除所有值为val的元素
void removeAllvalue(int val);
}

上图中为该接口所有需要实现的方法,接下来我们对这些方法一一进行覆写实现之前,需要创建一个类,来把基本数组封装起来,并且明确好内部所有需要的内容。

第二步:创建类,封装数组继承线性表接口,完成初始化的设定

public class MyArray implements Seqlist{
    //实际存储元素的数组,就是上文中提到的那个被封装进类的数组
    private int [] elementDatas;
    //当前动态数组中实际存储的元素个数size
    private int size;
    //数组的默认初始化长度(此处为10)
    private static final int DEFAULT_CAPACITY = 10;
    public MyArray(){ //无参构造,不知道元素个数的时候调用
        //默认产生对象时,初始化长度为10
        this.(DEFAULT_CAPACITY);
    }
    public MyArray(int capacity){ //有参构造,知道元素个数的时候调用
        this elementData = new int
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

花落尽舞

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

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

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

打赏作者

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

抵扣说明:

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

余额充值