目录
sort方法
1,当用户使用arraybox可能会有需要给数组排序的需求,作为高级程序员,我们在封装arraybox时需要考虑的用户的这种需求,所以我们需要一个sort方法
2,但是用户想要怎么排序,对什么类型的数据进行排序,是升序还是降序这是我们没法确定的,所以我们需要让用户将排序的过程告诉我们,而过程没法作为变量进行传递,因此我们需要让用户将这个过程编写在方法中,在把方法所在的类的对象传递给arraybox
3,这个过程和上一篇写remove方法时是类似的,因为可能有很多的类对象都要进行排序,所以我们在用sort方法接收对象时需要使用多态的思想,以保证所有类型的数据都能接收
1,我们定义一个父类,以后所有要用sort方法排序的类都需要继承这个父类,并且将排序的过程的代码编写在从父类继承并重写的方法中
2,父类中的方法的方法体没有意义,只起到一个定义规则的作用,我们规定每次调用这个方法必须传递两个参数,而且方法返回值是一个整数
1,我们在user类中编写了两个方法(这里其实是重新定义了两个类,在新的类中编写的方法,目的是为了一次展示多个方法,因为方法重写方法名和参数列表必须一样,所以没法构成重载,只能在新的类中编写,自己写时只有一个方法可以直接让user继承排序比较器父类然后重写方法)一个方法是按照姓名进行排序,另一个是按照年龄进行排序
2,在方法体中我们使用了下转型,因为arraybox的数组里存的是object类型所以要把它变成本来的类型
3,在用姓名排序的方法中我们使用了compareto方法,这个方法的作用是对两个字符串进行计较,如果调用方法的字符串比参数里的字符串小返回一个负数,反之返回一个正数
4,在用年龄比较的方法中我们也使用这种思路,让两个年龄进行减法来返回一个正数或者负数
1,在sort方法中参数列表处我们使用多态将排序比较器这个父类类型作为对象类型,这样任何类型的数据都可以接收
2,然后我们遍历数组每次给user类的sort方法传递两个数据,然后通过返回值的正负判断大小,每轮循环我们找到最小的,把他和这轮循环数组的第一个位置进行交换这样就做好了排序
3,我们在以使用者的角度使用arraybox的sort方法时,需要把比较器对象传递过去
1,上面两个图一个是用姓名排序的结果一个是用年龄排序的结果
2,如果用户想实现倒序,只需要在自己类中方法返回值处的两个数据进行位置交换即可,这样做就能改变返回值的正负值