00:00
来我们看下最后这个类,这个类呢叫做tree set,我们提到这个点,它可以按照这个对象的指定属性进行排序,哎,我们这块来说一下,那这块呢写的,嗯,代码呢,我们这个就都不给它放到一个里边了啊,咱去新建一个。专门来说一下这个关于吹菜的一个使用,好这呢我们就直接来写这个代码了。行吹ET,我们这块呢,先去new一个,诶吹。啊然al enter生成一个set啊,这是你写set写set都一样啊,那么接下来呢,我们就要往这个set里边呢去添加数据了啊添加数据可能还会像刚才前面那样的一些做法,我加个123加一个这个456加一个AA。嗯,甚至呢,我们这里边呢,你再去给他拗一个user,这呢叫汤姆,然后12岁好就写完了,写完以后的话呢,我们这时候执行一下。
01:01
我都没有去遍历啊,只是做了一个添加一执行挂了,出错了,说是提的这个,说class class exception,说这个呢,Cannot be to。嗯,在20行出问题了,诶怎么会出这样的问题呢,这呢就提到一个点,咱们这个吹set的话呢,咱们刚才讲这个知识时候提到过,说它呢,呃,可以按照对象的指定属性进行排序,这个结构提供的意义就是让我们提供一些排序的啊,哎,那么提供排序的话呢,我们按照这个对象的指定属性排,那你指定属性大家都得有。那ya IG呢,就是咱们这个对象啊,你就不能是不同类造的对象了,哎,那你像这里边典型的这是两个整形,这是一个钝形,咱们就可能没有什么相同的属性了,哎,显然呢,就失败了,所以通过这个呢,咱们呃,明显提到的一个知识点。啊,那就是第一个点就是向这个ET当中。
02:05
添加的数据啊,我们呢,哎,要求是由同一个类啊提供的。由啊,或者就要求是哎同一个类的对象啊,或者叫相同类的对象,哎这呢是第一个点,只有呢你是相同类的对象,哎我们呢才可以去比较大小,所以首先把这个事呢,我们注释一下,哎这个呢是错误的,那说不能添加不同类的这个对象啊,这张失败了。失败。失败写到前边。行,那失败了,咱们接下来呢,只能添加某一个类的对象了,Set,我去做个艾特操作,不妨呢,咱们就拿这个先拿整形为例吧,我就那写这样这样的一些这个数据。
03:04
好写完了,那写完以后我们再先执行一下,先看。那这时候你看就没有报任何错误了,因为呢,你此时是相同的啊,这个都是inte类型的了,那么你能够添加成功,我们接下来看一看什么呢?里边这个数据它的一个便利情况,诶这呢,咱们又使用一下,哎,这个讲过的这个比如说迭代器,这呢我就不写了,直接拿过来啊,CTRLC诶拿过来现在我们去遍历,大家看一下我们遍历时候的这个元素的顺序。哎,你会看到它是从小到大的一个顺序排的啊,这呢就是我们所谓的就是向吹塞的中添加这个数据呢,哎,它是一个叫哎可以按照添加的这个指定的顺序呢,进行一个遍历啊这呢添的是这个in型或者叫in,应该叫in类型了,这呢是一个举例一。
04:02
来举例一,那接着呢,你还可以添加这个string形string型,其实这个大家下来可以写写,其实也能够想到是不是也可以排序啊,而且呢,你也应该知道是按照什么顺序排的,是不是也是从小到大顺序排的,哎,对的啊,那我就不演示这个词缀了,那么接着呢,我们演示谁呢?自定义类的对象,我现在呢,向这个set当中咱们去添加user。哎,整了这样几个user,这几个user的话呢,我们体体现一下这个不一样啊Tom Jerry。Jim。还有啊,迈克。嗯,杰克这个,嗯,然后这个呢,我们给一些这个具体的年龄,行这呢我就随机的写了几个数,那我希望呢说哎,那你也给我排排序,其实这时候大家也能够想象到了,这个是不是会有一些问题啊。
05:10
啊报这个错误了,Exception说呢,你这个user comparable,咱们前面讲常类的时候呢,见过是吧?对就是这种情况出现呢,就是你得告诉我怎么排,这呢其实没有说啊,那这呢,我们其实就提到了两种排序方式了。对,哎,两种排序方式,这个就是咱们前面讲的Java的比较器啊,自然排序。哎和哎,定制排序,那这个咱们都讲过了,只是在这儿呢,咱们只是没有去用,咱们当时讲课用的叫ari.salt那时候咱们讲的用salt来举的例子,现在呢,相当于把它呢换成啊用这个tree set来举例子了,做法呢是一样子的,那我们比如说这个user啊,咱们先考虑让它实现一个自然排序。
06:02
那我们就让咱们这个user呢去,哎,Implements实现一个叫comparable,那接着呢,去重写这里边的这个转换方法叫compare to,那这呢,我们可以指明,比如说说按照啊这个姓名从小到大排列,哎,就这么着。好,这呢,我们就跟原来写法一样了哈,O of user,然后呢,User,哎,U等于user o强转,哎,按照这个姓名,那我就直接return了当前对象的name,第二,Compare to user.name。你看就光按照这个姓名排,按姓名排完以后啊,这是一个if了啊,那来个else呢,就是你不是一个user,我们呢可以去死throw一个异常,哎让exception,哎这个呢,我们写什么呢?呃,输入的这个类型啊不哎匹配。
07:14
写完了啊,这个呢,我们写完这个品牌图了,接着回过来,回来以后我们现在去执行,看看是不是按照这个姓名这个顺序。哎,你看哦,这么多勾啊,没关系,哎,反正这个勾咱们这乱的哈,哎这呢,你看这个勾一样的时候呢,你再看第二个字符就行啊对ae啊,这就从小到大,那如果你要是从大到小呢,对,你就在这个位置呢,给它加一个符号就行啊,这就是从大到小。哎,这就行好,这个呢就比较轻松,那接着我讲一个难点啊,看我现在呢,再加个元素。再加元素叫Jack克啊啊Jack克杰克啊,嗯,56岁。
08:03
你说这两个人算一样还是算不一样?按说是不是应该算不一样啊,这两个对象呢,按照咱们前面讲的说这个set这个比较标准来看,是不是他俩应该都能添加成功才对啊,那么你看一下我执行。扎克就一个,另外一个呢,没出来,这个没出来。那往回推什么原因造成的,就是呢,出现两个,哎,我们按照compare to去比较,发现呢,它俩是一样的,相当于呢,是不是在这个里边return了一个零啊。哎,那么RETURN0这个呢,额外强调一下啊,在咱们这个set当中,它呢,判断说相同不相同的标准不再是咱们讲的那个ES了。
09:02
这哥们比较特别啊,咱们set里边讲到了,说比较是不是相同,本质上呢是ES,这个不是啊,它本质上比较的话呢,他就拿我这个compare to去比了,你要是返回是零,我就认为你俩一样。那那显然呢,咱们这呢只是按照姓名比的,没有像咱们上面写的ES,还拿这个年龄比了,所以说呢,这块呢,就哎稍微有点不一致性啊,那这个怎么解决呢?这就看你怎么想的了,如果你要是想说说呢,呃,像这个Jack呢,也希望他进来,那你就是不是指定我们说的二级排序。先看一下这个呢,是不是一样的是吧,比如我们这块呢,给大家注释一下啊,在这我们先获取这个所谓的这个值,哎,不妨呢,我就做compare这个值了,哎,就是我们的这个数啊。这个数吧。CTRLC拿到这个数,那么如果你这个compare这个数呢,它是诶不等于零的。
10:05
不等于零的话呢,那你就直接return一下我们这个compare就完了,那如果说它要是等于零,说明呢,他们俩姓名一样,姓名如果一样,我们接着去比较一下年龄,哎,年龄我就直接调这个叫in体,这点它有一个方法叫compare了,哎,把我们当前z.a值放进去啊,然后user4.a纸呢放进去这样比了。这个呢是默认也是从小到大啊说姓名呢,先从大到小排列,然后呢其次哎年龄哎从小到大哎排列这呢,我们就给它加了一个逻辑,这个逻辑加上以后呢,那基本上就是我们在ecos里边用到的属性,在这里边也都加了,那接着回过来我们再看一下能不能加进。那这时候呢就可以了啊,哎,因为我们这呢,从小到大了,所以你这个呢,56就在后边。
11:01
啊,那这是这个情况,那如果说呢,你说那如果呢,我们按compare比,只要呢,我们参与比的这个compare呢,假设我们只考虑姓名了,这个没考虑那一样了,我就不要了,那就还按咱们刚才那个说法去写啊,刚才那个说法去写,那EIG呢,咱们还提到了一个事情啊,什么事情呢,就是在咱们这个目前是自然排序啊。自然排序中,哎,我们呢,比较两个。嗯,对象是否叫相同的标准。是否?哎,相同的这个,哎标准标准为什么呢,就是我们的这个compare to方法,它呢返回哎零哎强调一下说不再是。对,哎,不再是我们这个E的方法。
12:00
哎,不再是这的方法了啊,哎,其实严格上来说呢,它呢可能你就更严格一些了,哎就更严格一些,只要呢,可能某一个属性一样了,哎我们就不认为它是ES了啊其实杨I迪也说了,另外一个事,就是我们这个吹S里边呢,它是不能够去放这个相同的数据的啊,他不能放相同的数据,他呢,底层是什么样的呢?它是一个树形结构,哎我以这个整形这个数为例,比如说这个数呢,是34,哎比它小的数呢,我们就放在这儿,这是12,比它大的数呢,就往这放啊,这是65。啊,64吧,然后12呢又往下分,比12小的数呢往这放,比12大的数呢往这放。这个比12大的这个输入它肯定不会超过这个34的啊,超过34的话呢,它就往这边放了,哎64比64小的,比64大的,哎整个呢,它是一个有顺序的状态,这呢我其实画了一个在PPT当中就是这个啊哈set它底层呢是个竖形结构。再准确的说呢,是叫红黑树,先不多,先不说那么多啊,先是个树形结构,这呢就是我刚才说的这种情况,比18小的在这边,18大的在这边,每一个元素都如此,小的在左边,比它大的呢在右边。
13:11
啊,这就一个数据结构,在这个数据结构当中,咱们是容不得放相同数据的。你说我这有18,我想再来一个18,不好意思,我这是二叉树,小的放左边,大的放右边,没有中间。啊,所以呢,只能够放相同的一个数哈,就相当于我跟那个18去比,比比不就意味着compare to吗?啊,那你小的就往这放,大的往这放,返为零了,返回零不要。哎,就这意思啊。行,那这呢是我们说的这个叫自然排序啊,主要呢,大家关注的就是哎,它的这个比较标准变了,至于说呢,我们去这个实现comparable接口这个事儿呢,咱们前面已经讲过了。实现这个接口啊,这个呢,我们先停一下。
我来说两句