00:00
大家好,我是海波老师,我们继续来讲Java集合中的list,前面咱们说到了啊,咱们的历史的接口啊,它定义了集合对象中存储的数据啊,它是有序的,而这里的有序啊,它说的并不是数据大小的顺序,说谁大谁小不是,而是数据的什么插入顺序,那么就是第一个插入的数据呢?我们读取之后还是第一个对吧?那好,如果我不希望按照数据的插入顺序,而是按照数据的大小的顺序来获取数据怎么办?那这个时候就需要对集合中的数据进行排序了,所以啊,我们这里呢,给大家来演示一下啊,咱们来,咱们来,咱们拷贝一下,咱们叫做零啊。那把这个去掉啊,咱们写上它,咱们叫做sort,咱们排序啊,咱们点击OK,点击OK以后,我们把这些东西啊,咱们都给它去掉啊,咱们都去掉好,然后那我们写上它,咱们叫做salt,我们的排序之前的课程中啊,给大家讲了几个简单的排序,一个是冒泡排序,一个是选择排序,那么我们如何让我们的集合可以进行排序呢?其实告诉大家,我们根本就不用做任何操作,因为咱们之前就提到过,Java设计集合类的目的就是为了让我们存储数据和管理数据更加容易,那如果排序这样的功能还需要我们自己实现的话,那是不是就不是那么的方便了吧?所以集合类啊,它提供了用于排序的方法,咱们来看一看啊,来,咱们写上它,这叫list,等于list,它等于new。
01:21
咱们就free list好了,写完了以后,我们现在呢,写上一个list啊,我们增加一个我们的一,然后呢,再来我们增加一个三,我们再增加一个二可以了,点完了以后,按照我们输入的顺序,我们是132,所以咱们打印,打印以后我们现在的数序呢,其实是有序的,但这个顺序呢,就是我们的插入顺序,因为它会插入到数组当中,而数组呢,是由我们索引的,对吧,它会按照索引的顺序把数据打印出来,所以132这是没问题的,那既然没问题,我说过了,我如果想把这个数据我排个序怎么办?那么这个时候呢,就有一个我们的list点,我们叫做sort。
02:01
这个short呢,就是我们排序的意思,只不过呢,它需要传一个对象叫comp,这里的compor呢是一个比较器接口,所以咱们给它来这里呢,我们说一下,咱们叫做来写上它那排序啊,它需要传递一个实线了比较器接口的对象,这里的比较器是什么意思呢?其实啊,它就是将集合中的数据呢,两两比较的意思,哎,什么意思啊,怎么还两两比较呢?其实大家想一想,我们当前的132,我们如果排序的话,咱们比方说啊,从大到小排序什么意思,我现在呢,我们的数据是一,我们的三,我们的二,对不对,我们叫做三二,我希望呢,从大到小就是321,不是从大到小嘛,这是一种降序排列,对不对?那我该怎么做呢?这个时候大家会发现,我们首先是不是应该把一和三比较一下,比较完成以后,我们明显三比较大了,我们要交换位置对不对,所以这个时候呢,我们就要把三和一调换一下好了。
03:00
不能,我们看到了我们的这个一和二,那么我们的二比较大对不对?我们需要是不是再交换一下位置啊,所以我们再来,我们叫321,同学们有没有发现我们的结果已经出来了,但是有没有找到规律,我们这里的规律就是你不管怎么去做比较,都是两两比较,比方说一和三比较对吧,交换了以后我们的一和二是不是再比较啊,所以你无论如何去排序,我们基本的处理方式就是两两比较,看谁大谁小对吧?所以呢,我们传递一个比较器接口的对象,就是告诉你我们如何自己来定义我比较的规则,而我们的集合就帮助我们按照我们自己的规则来排就可以了,所以这样的话不就简单了很多嘛,对不对?诶,那说了半天,我们这个接口该如何去使用呢?那这里我们就写上咱们叫class啊,咱们叫做number,我们叫数字的一个比较的一个规则,好吧,诶就是它行了。写完了以后,那么我们说过了,你写了一个类,或者实现这个接口才可以呢,所以呢,我们就写上叫computer,把这个拿过来就可以了,它里面有一个泛型,你就给它定义好,咱们叫in t就可以了,这就意味着呀,我们现在准备对整形的数据做一个我们的比较操作,那么这个比较怎么去写呢?怎么去做两两比较呢?我们用一个快捷键叫ctrl o,然后呢,把我们当前的一个比较的方法,咱们重写一下,点击OK,这个compare方法呢,它就是判断谁大谁小,可是返回的类型呢,是一个int类型,那我怎么知道它们两个谁大谁小呢?其实就是根据这个int的取值呢,来决定谁大谁小,那我们这里说明一下来。
04:38
如果我们的第一个数它比我们的第二个数要大,那么返回结果为正数,它表示灯序,如果呢,我们的第一个数呢,比这数要小,那么呢,我们返回我们的负数。表示我们的降序。
05:01
如果呢?我们两个数一般大,如果第一个数和我们的第二个数一样大。那么返回结果为零啊,那就没什么零,那就没什么东西了,把这个去掉好了,那么写完了以后,我们一个一个来看啊,首先他说了这个数比倒数要大,那么返回结果为正数,好了,我们就写上它,我们叫return,我们的这个O1啊,它减去我们的什么,我们的负二,你这就表示什么意思呢?就表示我们一数比第二数大吗?大了以后它大的数减小的数,那不可不就正数嘛,所以它就是升序,所以呢,我们这里来把它拷贝。拷贝以后我放到这个小括号里面,给它传进去,做出一个对象出来就可以了,好,我现在写上一下,记住我们现在表示声序,那么声序的话就是123对吧?所以我们运行运行以后看结果应该是没有问题的,那好我们再看下面它说了,如果第一个数比第二个数要小,那么小的话返回负数,那你想想吧,我们这个地方要返回负数的话,我们是不是应该用第二个减去第一个呢?所以把这个呢给它去掉,我们来拷贝一下,拷贝以后我放过来,我们用O2减去O1就可以了,哎,就是这样的,那么这样的话它不就大了吗?它不就小了吗?所以我们的第一个数确实比它小,那么这样的话我们就可以是一个降序排列了,所以咱们运行,运行以后咱们看结果,结果就是321对吧,哎,就这意思那么好,然后呢,我们把这个值呢,我们直接给它return个零,RETURN0就表示啊,我们的几个数啊,一般大。
06:33
既然一般大的话,其实你升序和降序就没有任何意义了,所以它的顺序是不会改变的,它应该还是我们的132对吧,所以我们运行,运行以后看结果你会发现完全一样,没有任何的区别,这就是我们最基本的集合的排序规则。
我来说两句