封装储存工具一:实现添加功能

目录

ArrayBox的初始结构

ArrayBox的添加功能

数组扩容


ArrayBox的初始结构

我们需要自己封装一个储存工具,这个工具可以无限的添加各种类型的数据,而我们现在学的知识中只有数据可以实现储存多个数据的功能,所以底层我们需要用到数组来储存数据

1,从封装的另一个角度来思考,我们不能让外界直接使用我们类中的属性所以这个数组我们需要将他私有

2,从继承的角度来思考我们需要让这个数组能储存各种类型的数据,所以用到了object类,因为所有的类都默认继承object类,这里就用到了上转型

3,index的作用是记录数组中元素的个数,同时他也能表示下一个元素要放的位置,因为数组的长度并不等于数组中数据的个数

4,我们在定义数组时并没有给他附初值,因为我们想无限存储数据,所以这个数组以后一定会扩容,因此我们最好让使用者来给他赋值避免浪费内存。那么使用者应该什么时候给数组赋值呢?应该是在数据初始化的时候,所以就用到了构造方法

 

1,如果使用者是一个并了解这个储存工具原理的人,他不在乎内存的浪费只想使用这个工具,那我们应该为他提供默认的空参构造方法

2,我们也提供可以规定初始长度的构造方法,用户传递一个长度,我们通过长度创建数组

3,扩容问题我们也应该考虑,如果只是默认的扩大长度二倍会有很多空间用不上造成浪费,所以我们创建了一个expansion用来记录以后扩大的长度,因为我认为这个属性只需要赋值一个并且不需要改变,所以将他用final修饰变成常量。这样用户在初始化时就可以规定扩大的长度

4,我们还用到了this,通过this来调用其他的构造方法能使代码更加简洁,如果不使用this你会发现这三个构造方法里写的东西都是差不多的代码

至此这个box的初始结构就写完了,接下来我们实现添加功能 。

ArrayBox的添加功能

添加是一种重复的行为,所以我们需要编写一个方法,用来实现用户的添加操作

1,添加功能本身其实很好实现,用户想要添加数据,肯定要告诉我这个工具你要添加的内容,所以我,们在方法的参数列表中要准备一个变量接受用户传递的参数,这里也用到了上转型,因为我不知道你要传递的是什么类型的数据,所以使用object类型

2,index的作用是记录数组中元素的个数,同时他也能表示下一个元素要放的位置,所以我们使用上面定义的index来将数据储存进数组,每添加一个数据index的值都要增加

3,添加的代码到这就写完了,但是我们需要考虑数组容量问题,所以我们应该编写数组扩容的代码

数组扩容

1.因为检测数据是否扩容是另一个功能,所以我们再编写一个检测长度的方法,这个方法是在工具内部检测长度使用的,所以我们不想让外界使用这个方法,因此我们将方法变成私有方法

2,首先判断index的长度是否等于数组的长度,如果相等了那必然需要扩容,扩容无非就是创建一个长度更大的新数组将旧数组的数据放进去,所以在创建新数组之前我们应该考虑新数组的长度应该是多少

3,int newLenth = expansion == 0? elements.length * 2 : elements.length+expansion;这里使用了问号冒号运输符,先判断expansion是不是0,因为用户肯并未有规定expansion的值,如果是0那我们就采用默认的二倍扩容,如果不是0就使用用户规定的扩容长度,最后将得到的新长度赋值给newlenth

4,将得到的新长度赋值给新数组,然后开始扩容操作,最后不要忘了我们使用的数组名一直是elements所以在扩容完成后应该将新数组赋值给elements

这样添加功能就完成了,剩下的功能下一篇来讲解 。

  • 25
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值