00:00
那下个问题就是对我们自定义类,对于我们自定义类,比如说我现在呢,定义一个class啊,在咱们这个问题当中呢,这就是属于一个一个的商品啊,那不妨呢,我这呢,就叫这个商品啊,叫good,哎,商品啊,那这个商品的话呢,我声明叫private,呃,String类型的商品的name private double类型的叫price,商品的价格auto shift s去生成它的构造器,先整一个空参的。哎,整一个代餐的,哎,两个都要,哎整了一个盖塞的方法,再加一个突死盾。好这个都要啊,OK一下成这呢,我们就把这个类呢就造好了,这个比较简单啊,这属于这个叫商品类行,这个类造好以后,我们回到咱们这个代码这个位置,现在呢,比如说呃,我呢想对咱们造的几个商品的对象呢进行排序。
01:09
商品对象,商品对象呢,你就得去建立叫good的这个呃数组了。哎,这个呢,我们比如说我这呢,先写上一个四吧,哎,我就造四个对象啊先是零。哎,New一个,哎这个叫裤子,哎这里呢,咱们去指定这个商品的一个名称啊,商品的名称。写个什么呀,这我这我就写拼音了啊,叫联想,这联想的鼠标。联想貌似这样,哎,价格啊34,哎这呢,我们再来几个,呃,联想的,还有这个联想给它换成这个英文吧。No。
02:01
是这样是吧,嗯,还有这个叫比如说戴尔的,嗯,小米也出了是吧,小米这啥都出啊,小米的还有这个,嗯,联想华为没出吧,不过也迟早的事儿是吧?啊华为现在也整的就是全价统一样啊,啥都有,嗯,价格戴尔的比如说43啊,小米的小米主打性价比啊,12块钱比如一个啊,估计也不敢用是吧?嗯,这个来一个这个哎,65的,比如这样啊。好,这呢,我们就给他造了几个对象。诶,那我也也自然而然就都放在这里边了,现在呢,我想对它进行排序,你可能会想,诶,那我也用这个CTRLC,诶扔到这儿,扔到这儿的话呢,哎,首先呢,首先确定能扔进去,因为我们调的一个方法呢,参数是我这类型的啊都能往里扔啊那排完序以后呢,我们这时候呢,进行一个遍历,说诶string呢这样写,我也这样写,看看行不行。
03:06
一直行啊挂了,这时候提示说,说你这个叫class cast exception怎么着呢?说你这个故啊,说cannot be cast不能够转换为comparable。哎,你要是一开始不懂这个接口,你会很莫名其妙,我这也没有去实现接口,你干嘛非得要我跟comp打交道呢?哎,就是因为咱们现在呢调这个salt了,Salt呢,你涉及到对这个呃数组的元素进行排序,那就需要比较大小,而你当前这个故事,咱们说默认情况下,这个对象啊不能比啊,你要比的话呢,就得跟他俩讲打交道,默认的时候呢,他是认为跟那个comparable打交道,所以呢,这块会提示说你不能转换,叫类型转换异常啊,所以呢这呢,我们就提到了另外一个知识点啊,这会写一个四四什么呢,就是对于自定义类啊来说,如果啊需要排序啊,我们呢可以让自定义类。
04:07
哎,去实现咱们的comparable。哎,接口,嗯,实验这个接口,然后呢,你去重写一下这个叫compare to的这个方法。啊,比较对象的方法,那么重写这个compare to方法呢,你去指明啊,在我们的compare to这个方法中指啊如何排序。把如何排序这个事儿呢,放到我们的compar图当中去做,行,那通常呢,我们把这种事情呢,称作叫做自然排序,就是使用它这个comparable,这个呢,相较于咱们一会儿讲的这个compar啊,把它呢叫做哎自然排序。就是它默认的时候呢,会考虑comparable。啊,这个叫自然而然的一种情况啊,叫自然排序了,好,那咱们这时候呢,在这个故事里边呢,就得做这个事儿了,首先呢,让他去implements,咱们的叫comparable,啊,那你去实现这个接口al斜杠,自然而然的就得重写人家的方法叫compar to的方法就在这儿,在这个方法当中,咱们指明呢,按照什么方式进行排序。
05:20
咱们这个叫指明啊,这个商品啊,其实呢,相当于商品比较大小的方式,咱们刚才也看到了,涉及到一个int,就是你看看是谁大谁小,返回正数负数,哎,刚才都已经说过了啊,嗯,那么这是一个object了,咱们也得判断一下,这块呢跟咱们说的ES有点像,首先你是不是CE of这个故子。是不是个商品,是个商品好做一个转换。哎,把我们这O呢做一个强转,转完以后,当前对象和我们这个行三对象,这就是两个对象了啊在咱们这个题目当中呢,比如咱们希望呢,是按照啊,比如说价格吧,哎,从低到高。
06:12
哎,排序,那如果你要有这样的诉求,那直接呢,我们这时候呢就比了啊比的话呢,怎么办呢。嗯,这个呢,比如说if,说if谁呢?诶,如果当前这个商品的price价格是高于咱们这个行参的price。返回一个正数是吧,这个至于说正的是一还是二无所谓,我就写一个一了,嗯,那else if当前的这个price小于哎,故ose.press哎,这个呢,我就return一个负一,那else相等,哎,这成个零就可以了,哎,这是其中一个一一种方式啊,这个你也可以呢,呃,如果有同学说直接让它俩相减,相减呢,还不行,因为我这是double类型的啊。
07:05
你也不能再去强转一下,强转有可能,比如我这是这个42块五是吧,哎,你这是,呃41块七,其实呢,这个大,但减完以后呢,变成个0.8,你要一枪转是不是成零了不合适了啊,诶这个我们可以这样去写,或者你去掉那个包装类里边有个compare方法。Double。Double这个类点,它有一个呢叫compare方法,你看我把俩商品价格呢放在里边,这样也行。哎,你要是用它这个做返回也可以啊,这个是一个方式二。显然这种看着要简单一些,但是其实呢,只不过呢,是把这个咱们是自己写的,这个呢是他自己在里边呢写了,没啥区别,应该是吧,哎,这是他写的啊,这个呢,只不过咱们自己呢写出来而已啊,这个你选一个就行,那比如说用咱们这个呢,咱就这样写了。
08:11
好,这呢是针对于人家是一个商品的时候,那也有可能呢,它根本也不是一个商品,那不是个商品的话呢,这个时候你要说return一个零呢,也差点意思,那干脆呢,我们这呢给他抛一个异常是吧,说你输入的这个商这个商品类型呢,不对啊,Return啊,这个throw又一个,不妨我叫runtime exception吧。呃,这个传入的啊,数据类型啊,不一致啊,这个我们抛这样的一个异常,这呢,因为是一个运营式异常,其实呢,就可以考虑不去处理了。行,这个呢,我们就这样子啊,那再回过来,再回过来以后呢,我说这个事呢,就可以执行了。相当于我们在这个呃故事当中告诉咱们吊哨的方法的这个结构啊,说呢你呢去按照啊这种方式。
09:05
进行一个排序就行了。来,我们直行。好,这个大家这就看到了,因为咱们已经重写吐司人方法了啊,这里边呢,这不就看到这个价格,这个价格,诶这个价格。这个价格,那这呢,就是一个按照升序排列的。哎,这呢,就这样去做。总结一下。嗯,大家呢,如果后边呢,需要涉及到关于像string啊包装类的排序,不用没事儿,不用你去考虑重启了,它都已经重写过了,直接呢你该排就排,直接用就完了,那如果是我们自定义的类的话呢,哎,那就需要呢去指明该怎么排,那我们可以怎么做呢?其实其中的一种方式就叫自然排序,哎就是我们这个第四个说的,你就让你自定义的这个类呢,去实现这个接口,哎然后呢,重写这个方法,这个方法呢,写法跟咱们讲ES呢是有点像的。
10:05
啊,Ecos呢,只不过说呢,哎,属性,呃,我们判断是不是ecos好几个属性都得去参与,这儿呢,不用这呢,咱们就光按照价格比了啊,当然呢,有同学可能也会想说你这个类啊,它万一要这两商品价格一样,是不是又得考虑谁上谁下了,那怎么办怎么办,接着再比呗,就跟说你这个写了一个一层if else搞不定我就里边再套一层呗,对吧,你像这样呢,我们说else,这是不是RETURN0啊,RETURN0那我就在这里边再接着去写,相当于呢,按照价格从低到高排序,然后呢,呃,这个这就相当于叫二级排序了,先按照从价格从低到高,然后呢,呃,再。嗯,按照按照什么呢?按照这个产品名称。
11:03
哎,这个从还从低到高吧。哎,排序当然你也可以从高到低啊,哎,再按照这个去排,那这块呢,只是在这里边,你别RETURN0了啊,我再拿它的商品名称是不是这点它的name了,Name作为string是不是他都已经写过了,我们再调一下compare to,你把你这个呃,Goods的name放进来,本身这个呢,不就是从低到高吗?我就直接再return一下。就可以了。啊,就是如果你需要的话啊,你这样去做不需要呢,就直接就成零了,那回过来啊,这呢,咱们这个商品呢,这个价格呢,没有一样的,我再加一个吧,这来一个五。嗯,这个来一个四,嗯,华为再来一个嗯,Microsoft。
12:04
哎,这个微软也出了个鼠标啊,微软鼠标挺贵的啊,哎,行,假设呢,它跟那个华为的价格一样,价格也跟它一样了,这个正好他俩还挨着啊,43吧,这样子,那它俩的话呢,价格一样,那我们接着就按照它这个,哎这个顺序从低到高的一个方式进行排列啊执行,哎你看这时候呢,价格啊,12 34 43 43,哎这两个43呢,你看这个呢,M在我们这个,呃,D的这个后面,那有同学可能想说你本身这个就在前面呢啊这跟这没关系啊,你要非要说呢,就是有点关系,那那我们就缓过来,我还可以在这加个符号啊。这什么意思啊,那我不就按照这个从高到低了吗。哎,这个得灵活一点啊,通关到底了,然后你回过来再测试一下。
13:05
再去。哎,这时候呢,看12块钱,哎34,哎43,那43的时候呢,这不戴耳朵跑后边了吗?哎,他又跑前边了。哎,这个呢,其实就相当于算叫二级排序了啊,先按照这个牌换换,这这牌,如果说诶命容还一样了,命还一样了,还有别的属性,那你就在里边再接着写。因为if能签到,那就往里套呗,只不过这块呢,它比较简单了,这个它已经排过了,所以我们直接掉了,你要这块呢,这个属性呢,呃,是另外一个自定义类的,那你这里边就得写if再去嵌套着去写了啊就是这个样子啊,咱们调的就这个方法,我这就没有必要在这里边去加一个输出语句了啊加一下这个输出语句呢,大家可能看的就更清楚,比如我这加几个星,哎,你会看到呢,我们在这个位置去调S的时候呢,这个星呢就哎执行过是吧。哎,说明呢,确实是调咱们这个compare to方法了啊行,这个呢,就是咱们说的这个第一种排序方式。
我来说两句