封装储存工具二:实现删除功能和其他功能

目录

remove方法

remove的重载方法

show方法

下一篇来讲解对数组中数据按照条件进行排序的方法


remove方法

当用户使用这个arraybox时会使用到删除功能,而想要arraybox删除数据需要用户给我提供需要删除数据的位置,所以我们需要编写一个按照位置删除数据的方法

1,方法返回值位置我们可以用到上转型,将删除的数据放回给用户 ,避免用户删除了错误的数据

2,删除数组中数据的逻辑很简单,当我们删除了数组中一个位置的数据后这个数据后面的数据需要向前移动,最后我们需要将数组最后位置的数据置为null

3,在代码中我们通过用户传过来的索引位置加一找到需要移动的位置,然后开始移动数据,最后将index(数组中数据的个数)的值减一

remove的重载方法

当用户使用remove方法时可能会出现不使用索引删除数据的时候,用户可能会传递一个条件,box工具需要根据这个条件来删除数据,这就用到了方法的重载,我们需要一个参数列表中有条件,方法体不一样的remove方法

1,因为条件可能是任何类型的数组,所以我们使用object类型定义一个condition变量用来存储用户的条件

2,我们继续向下编写代码使用for循环将数组中的数据拿出来,但是我们发现了问题!用户只给了我们条件,可是这个条件怎么使用我们并不知道,这个条件可能是个整数也可能是个字符串,这种情况应该怎么办呢?

3,我们继续思考一个问题:谁知道这个条件怎么使用?答案是:用户自己。

这个条件怎么使用只有用户自己知道,所以这个条件应该让用户自己编写

1,假设我现在的身份不是arraybox的作者,我是一个是用box的用户,如图我定义了一个car类,我们在car类中编写CarNameComparator方法将怎么使用这个条件的代码写在这里,这个方法的意思就是通过名字属性来删除数据

2,经过分析想要通过名字删除数据,需要给我传递删除的条件,以及数组中的每个数据,所以定义两个参数,condition保存条件,obj代表数组中每个数据,这也意味着我们想使用这个方法需要用到循环,将数组的数据传递过去

3,因为数组里的数据是object类型所以需要下转型成对应的数据类型

4,我们要明白一件事,删除这个操作是不能让用户自己编写的,也就是不能写在用户自己定义的类中的方法中,不然用户为什么要使用box工具,所以用户要做的只有告诉box工具删除的条件,不需要用户自己删除。所以这个方法最后只返回一个boolean值就可以了

5,那么条件的使用过程怎么告诉box工具,我们怎么传递一个条件的使用过程呢?

我们只需要创建对象,将对象传递给box工具再通过对象调用方法就行了。但是我们又发现了问题

如果这样写那么这个工具就只能删除car类型的数据,并且在调用方法时只能调用一种方法如果我还有按照价格删除和颜色删除的方法就没用了 ,所以我们需要给每个要使用remove方法的类编写一个共同的父类,然后让这些类继承这个父类,重写其中的方法

1,这个父类中方法的代码没用意义,他唯一的作用就是起到一个规定的作用,继承了他的子类都要按照这个规定编写方法

2,这样子类重写的方法的名字就得到了统一,同时多态的特性也让box中可以接受多种类型的对象

1,这样在box中就能拿到各种各样类型的各种删除方式了,我们调用方法后会得到Boolean值,如果为真就说明找到了满足条件的对象,直接调用我们上面写的按照索引删除数据的remove方法即可完成删除操作,而且这个方法可能会删除多个数据,因为条件和索引不一样,索引是唯一的,条件可能多个对象满足

2,这里需要注意i++不能写在for循环里因为如果你删除了一个数据,那么后面的数据会前移,这就相当于进行了i++如果继续i++会错过一个数据,所以只有在Boolean值为false也就是没到满足的对象时才进行++操作

show方法

我们在编写一个show方法用来帮我们遍历数组中的数据

show方法本身很简单,但是这样打印出来的数据并不好看,因为使用print打印对象时会自动调用对象的tostring方法,如果没有重写会调用object类中的tostring方法,object类中的tostring打印的是对象的地址值

所以我们要在car类中重写tostring方法

接下来我们在测试类中测试一下效果

我定义了四个对象,用add添加进了数组,然后我调用remove方法,条件是370000,同时传递了car类的按照价格删除对象的比较器对象,说明价格低于370000的对象会被删除,删除之后打印的对象就只有audi了说明删除成功

下一篇来讲解对数组中数据按照条件进行排序的方法

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值