00:00
那么我们接着呢,昨天呢,哎还是先开始来说一下这个collection接口中的常用方法,哎,我们再去新建一个module,诶Z06好,在这个呢,打开SC下先新建一个包行,那么我们讲这个集合的话呢,其实主要的还是就谈列API啊,说呢我们什么情况下,就像咱们这个昨天讲的这个整个这个框架一样,说呢现在呢要存储很多数据了,说这些数据呢,它是一个有序可重复的,OK,那你就用list啊,List呢有好几个实验类,那你就看呢,诶每一个呢有什么特点,咱们呢,讲课这块都提到他们三个的区别,那你就选择一个你合适的,选择完以后的话呢,你就去调它里边方法。所以呢,我们这一章说的直白一点,就是大家呢,哎看看都有哪些类,每个类呢有哪些方法,你是什么样的数据,你就选哪个类,你就呢,哎造对象调方法就完了,说的非常直白,这一章其实就主体就这个事儿,那我们说呢,深度再深一点,就是说呢,哎啊用这个类了,这个类里边呢,它是怎么填数据的啊,它里边怎么做的,涉及到一些底层源码的实现,我们就是相当于深度上呢,在深一档啊,仅此而已,那么深第二,呃,这个到第二档就是看源码的前提呢是大家。
01:19
先会去用,你如果连这个用都不会用,你来了一堆数据,现在用什么去装这个都不知道,然后光是看源码了,这个就没有意义了,你得先会用,然后呢,在这个基础之上,再看看它里边怎么做的啊,它有一个递进关系啊,那好了,咱们先还是来说一下这个collection当中的常用方法,Collection的一个test OK,昨天呢,咱们讲了其中的这个五个方法,接着呢,我们去说这呢就是关于collection。呃,接口中这个声明的这个方法的一个测试啊,那除了那五个方法之外呢,我们接着来看一下其他的,这我写个TEST1TEST out enter一下,导入一下我们这个这unit行,那讲完这五个方法以后,我们接着再看剩下这个方法,比如说呢,我们再来提一下这个叫诶cons。
02:18
那这样一个方法,那这个呢,你从这个PPT也好,咱们这块呢,就按照这个功能啊,这呢我给大家罗列出来了它的一些这个相关的方法了,哎,你也可以呢,看一下我们这个API,从这个API层面呢,这里边涉及到这个方法呢,大家下来呢,也自己呢去做一个测试,哎这些方法呢,都在这罗列呢,这个呢,你要是用的八的API看的话呢,这边方法呢会偏多一些,因为呢八当中加了一些default这个默认方法啊,你可以看这个obsttract,这呢就是以前定义的这样的一些抽样方法,那我们测的就是这样里边这些,那先看这个叫contents,它的前提呢,你得先有这个集合,那这块我们不不妨呢,先把这个集合呢先造出来。
03:07
我们还是拿了一个叫release,所以它呢,此接口的一个具体实现类,我们进行了一个测试,诶CU当中呢,我们去添加一些相关的数据,这呢其实123是它对应的一个包装类了,因为艾特方法呢只能填对象。嗯,这个注意一下,哎,然后C点我们呢,去做一个,再艾特一下,这个先填两个数。然后呢,我们再往里边呢,比如我们去扭一下这个string,这呢是我们造的一个字符串的一种方式啊,比如叫Tom。Tom,哎等等,哎,你也可以填一个false,这是一个布尔类型,哎这个布尔类型呢,应该是这个叫布尔类型,哎包装类的,嗯,接着的话呢,我们再去艾特一个,嗯,艾特什么呢?咱们可以自定义的一个类,这都没问题,我们自定义一个比如叫person类。
04:01
这类里边我们还是比较经典的啊,剩面两个属性随这类型的name in型的age al shift s提供构造器,先是一个空餐的。然后代餐的两个参数都要啊,OK一下,接着呢,提供这个盖菜的方法。来,按住我们这个CTRL键,把两个都选中,OK,再去提供一个to string。这是我们基本建一个扎2B,涉及到的这样几个结构,扎病呢,我们前面也都提过了这个概念,然后回过来呢,我们这呢,可以去给它添加一个自定义类的对象啊,这个我们就来直接用这个吧,去new一个person,在这里边我们指定比如叫Jerry这个20岁行,这呢我们就填了几个元素,123455个元素,填完以后呢,第一个叫做contains,我们通过这个CR点呢,去调contain方法,这个单词的意思呢,其实就暴露它的一个方法的一个功能就是判断,这呢,我们是一个这类型的一个obj,相当于就是判断咱们当前集合当中是不是包含OB比界。
05:14
当前集合中是否包含这个obj,那当然了,包含就是处,不包含呢就是false,那我这块呢,写一个123,那返回一个波尔类型的值就叫contains吧,S out一下我们的contents行,这个呢是true还是false呢?对,是个true。因为确实呢,里边包含了这个123,是个true没问题,好,这个呢是个true,再接着判断需要呢,我们这里边有些内容呢,需要大家去体会的cons,我对这个值呢重新复一,或者我就这么着吧,直接呢我们就c out c呢我们CL.contains我再来判断判断谁呢,我写个new润。New string这里边啊,我写Jerry啊,写什么没啥意思了,肯定没有,我就写Tom,说呢,我们这个当前集合当中啊,是不是包含Tom,但你要注意我这是new针,这也是个new针。
06:12
首先说这是不是两个对象对这两个对象了啊,那现在呢,我们判断一下这个肯DS有没有的话呢?呃,这个大家其实就不好去猜了,你只能是看人家怎么定义的对吧,我们通过这个结果呢,是不是倒推啊,嗯,然后我们执行一下。对,它是处,那你这块有什么话想说吗?这个判断的是地址还是判断的内容,对内容了,哎,我们看看里边有没有Tom,这显然是俩对象,肯定不是用等等判断的掉的,其实是EQ的方法了,哎,这个呢,如果你要觉得还不是那么明显,那咱们再举个例子,这儿呢,我判断一下是不是存在这个person。你看我这时候,诶,假设我先这样写,大家看啊,CTRLX我这么着先在我这给它显示的,造出这个对象来这样子的,然后这里边呢,我添加了一个P,添加了一个P这个嗯,还好没说放了一个P是吧,嗯,这个呢,我判断一下是否contain这个P这个出啊。
07:24
这个你可能想诶这掉E4还是掉这个等等啊,这个你不用多想,等等ECO的话呢,那都好使是吧,你这都是同一个引用啊,他用等等判断你这个是不是也是出,那用ES不管你充写没充写,你没充写顶多也是个一,也是个等等呗,所以这个位置呢,这肯定是不是出啊对这不用多想了,这都是判断是不是包含这个P啊,那关键呢,就我现在不是这样写的,我现在的话呢,哎是呢,直接在这里边去溜的。
08:03
像这一点呢,大家在开发当中你都得知道这些事儿,所以我们这块呢,相当于就在测试这些方法的使用,Con,我这里边直接写的这个new,把它呢注释掉。重新呢,我们再去判断一下,是不是content里边的话呢,我们就是重新new了一个对象。重新拗了个对象,那这个时候呢,是true还是false呢?有的时候处有的时候false了,实际上刚才我们看了string这个结论呢,你也已经能判断出来了,通过这个呢,其实已经说明问题了,它掉的呢,其实是ES,不是拿等等判断的,那这ecos的话呢,人家死终也重写过了,是不是就是比内容了,那比内容,那大家可能说这个也比内容,但是这个比内容的前提呢,是你自己,你得重写对吧?诶咱们没有重写,没有重写,这时候你掉ecos,那不就掉成object的了吗?
09:06
哎,我不知道大家有没有讲过,其实里边就是等等,对,所以目前这种情况,咱们要是去调的时候就成false了,诶对这个大家都应该能清楚这个事儿,这个呢是个false,那么我们呢,是不是可以考虑想办法给它变成是个出了,那就是你重写一下al shift s,咱们加上一个这个位置,嗯,这块呢有个选项哈,你是按照tell idea默认的方式,还让这个这种方式去重启,其实本质上没有太大的区别。这个大家下来你可以,哎这两个都试试,你看这个区别在哪啊,其实都还好,然后呢,我们选第一个了,然后这两个,然后这两个哎都都选上这个没事儿,人家一下就行啊。它其实判断里边呢,涉及到这个逻辑的问题了啊呃,这呢把它呢给它先除掉,我们关于哈ECO呢,先不用涉及,那先看这个ecos就可以了,这个equals呢,如果你也在想说是不是确实掉它了呢,你也可以在这里边呢,我们加一个输出语句说呢,这是咱们这个person的equals方法啊,这个呢,加上这个点点点也行,行回过来,那这个时候呢,我们去做一个content的判断,我们执行。
10:23
成,那大家你会看到这里边诶掉了好多,这个E扣的方法上面也掉了,你看是吧,先不说上面,先说这块,我们后边这个掉的时候呢,返回的,诶返回的还是一个force是吧。返回的还是一个false。这个我们刚才这里边这个写法应该有关系。所以我们把它呢再删了。Auto shift s这个我们再重新点一下它这个呢,Default的方式,你或者你不用它也行,你换成这吧。这是用咱们这个,呃,重写我们object里边的ES这样的一种写法啊,Java这个七及以上的这版本的一个模板啊,Next选这个吧。
11:08
写好了,写好以后呢,我们在这里边呢,再去s al一下输出,我们是还person类的,诶诶equals这个方法还后的呢,暂时咱们用不着先注释掉,回过来这个我们再去执行。嗯,好,哎,还是个force,我这写的不对吗?JERRY20 contain整了半天,我这写错了,这他妈整了个contain,艾特吧。是吧,网上大明白啊,虚惊一场啊,这个写爱的啊,这这怎么整了content了在这啊,这我是添加一个对象,你这里边根本就没有这个刚才的person了啊,诶这呢是一个contents,所以刚才呢,我们你是用哪个里边的哪种方式去重写equals,其实都应该是对的,这我怎么说这个怎么还不对了呢,这呢,我们再去把这个语句呢加上。
12:06
哎,E的这个方法好,回过来是咱们这个代码刚才写的这有点问题啊,执行这不是就是个触码,哎,就是相当于现在呢,我们判断是不是包含这个对象呢,返回的是个true,那明明呢,我们这呢是新new的一个person啊,那就能够发现它比的呢,其实是我们这个E构的方法,那怎么证明呢,咱们也看到里边确实掉了啊,这个怎么就掉这个equals了呢?其实你看这块包括呢,就是它掉了几次啊,你看这块的话呢,我们判断它先呢,拿我们现在要判断它有没有的这个对象呢,去跟上边去比,咱们先添加到123,那其实就跟123这块去比了,这块怎么比呢?实际上呢,是拿着咱们这个对象所在类的E的方法,它呢,作为这个前面这个调用者啊,他去点ES,然后呢,把我们这个123呢,放到你的这个对象所在类的ES的行参看一下,跟这个一样不一样啊调过一次这是。
13:07
这一次,然后456是不是又掉一次,然后呢,这个new它又掉一次,哎,又at个force又掉一次,然后呢,我们艾一个person又掉一次,掉了这么几次,那好了,现在你看我把这个艾特这个事呢,我往上提哈,或者这样吧,我把下边这个往下提,这样啊,我让这两个呢,跟大家就挨一下吧,往下提,或者你再再提一个。这样啊,我们此时这个person呢,是一二第三个位置,现在呢,我们去做一个test,你看这时候是不是就三次啊,就是我们找第三个位置的时候呢,就找到了,找到呢就终止了,就不用再往后去比了,哎,这时候呢,我们看到啊就确实呢掉E扣四了,而且掉了几次呢,也很清楚啊,其实这个时候掉几次跟我们这个也有关系,就是这个release呢,它是有序的嘛,咱们先天的它,后天的它再添的它啊所以比的时候呢,也是按照这个顺序呢去比的啊这个大家了解一下,那么通过这个contents呢,咱们要说明的一个问题就是啊,我们啊会去调用,在判断时会调用咱们这个obj对象所在类的啊equal库的方法。
14:27
诶会判断这个方法,那么对于咱们来讲,那我需不需要去重写这个方法呀,因为你会看到像这种情况呢,自定义类它是有区别的,那你看人家string像这种呢,都重写了,所以对于咱们来讲,大家调这个contents的时候,既然要呃调这个E方法,对于咱们的要求就是咱们通常呢,自定义的类都要去重写一下这个议会方法啊,这呢相当于咱们的一个要求了啊,这个要求呢,我写到这儿就是像。嗯,像什么呢?像collection这个接口中,当然具体就是接口的实现类中,实现类的这个对象中,添加数据时看添加数据时啊这个要求,其实这个数据呢,它其实也是个对象了啊,这个数据我们叫obj吧,说要求这个obj它呢所在类要重写啊,Equals方法,咱们本身呢,Collection接口中填的数据呢,都是object类型,都是对象啊,所以这对象一定有它的所在类了啊,它也填不了这个,呃,基本数据类型。
15:38
啊,天的基本数类型,这也都是装箱以后的integer啊,那integer也是个类啊,也得涉及到重写,OK,这呢是我们得到一个结论,那不管这个方法是咱们后续的这个方法呢,其实都是啊,再测一个这个叫contains all,这个呢,咱们比如说就今天刚讲的啊,所以咱这就写成个一吧,昨天咱们讲了五个,这个呢写成一个二,Contains all contain2的话呢,它会又有一个这个参数,那叫做collection,另外的一个哎,接口了,好,我们看一下啊,CU点二,我们第二个叫contents or再传一个collection作为这个行参,判断一下这个接口中所存的数据是不是都在咱们当前这个集合中,判断这个行参对应的叫CO1。
16:29
啊,中的。所有元素是否啊都这个存在于这个,存在于这个当前这个集合中,那如果都在,那就是处,只要有一个不在呢,就是false了,很好理解,对这块我们再去新建一个。哎,CU啊collection这个呢叫CU啊,等于那按说呢,又得去新旧一个了,这块我们说一种其他的方式啊,这个咱们在这个ari里边。
17:05
嗯,它有一个方法呢,叫as list,这个工具类里边有个叫as list,这个可变形参,这个位置呢,你其实可以写几个数了,比如我写一个123逗号456这样就行,返回的其实是个list,那list呢又是collection的一个子接口啊,这是一个多态的方式了,然后咱们判断一下这个CL1当中是不是都包含在C当中,是不是都包含CU1的这个数据,直接呢,我们做一个S。哎这么着,哎这就可以了啊,那是不是contains,那我们执行,哎结果呢,又是一个处,哎就是因为呢,我们这123456就都在你这写1234567啊,这就相当于有一个不在,只要有不在的啊,这款就是一个force。那这块呢,相当于刻画的就是他们二者之间是不是这种关系了,这个里边是不是都包含这个里边所有的啊。
我来说两句