00:00
好,复习一下,打开一单瑞看下,我们这个叫集合集合collection,咱们呢,之前是先从这个collection开始讲的,嗯,之前呢,稍微提到过,在之前一天啊,提到过这个collection中的一些方法了,呃,我们这个前一天再一上来呢,是先来说一下这个collection的这个方法,哎,从这开始的,那么它的常用方法呢,我们提到有15个,以前呢,咱们很少说讲个类,把这个类中的窗全全部方法呢都讲了,即使像object我们都是一波一波的开始讲的啊,甚至也有些呢,我们只是了解了一下啊,没有深入的去说,那么collection呢,稍微特别一些,它中的方法呢,咱们其实是都讲了,哎,涉及到这样的一些啊,像这个爱的方法,这个我稍微写写啊,那爱的方法啊,还有at all,将另外一个,哎,集合中的元素呢,都给你添加进来,那我们还有一个叫S方法。
01:00
看有多少个元素啊,Is empty,看看它是不是空的,Clear清空一下,这是咱们讲的第一波啊,在之前一天说的这五个方法,然后在后边呢,又提到一些方法,这些方法呢,呃,就强制的要求我们所这个添加元素所在类一定要重写ES了啊这呢,我们提到比如说叫contains,是不是包含某一个元素,哎,Contains。哦。哎,Contain all是包含另外一个机构中的所有元素,还有呢,叫瑞remove移除某个元素,移除的前提你得先证明有啊,所以得调ES remove。将当前集合和另外一个集合当中共有的元素呢,给它移除掉,相当于呢,就求比如说就相当于是A集合,你要是调这个叫瑞remove,哦,把这个B放这里边了,相当于呢,是从数学上来讲是一个差集啊,A集合B集合叉掉它们共同的部分,只要A的这部分,这叫瑞O,还有一个呢,叫啊,Rere rere是吧。
02:17
说呢呃,获取当前集合和这个形态,这个集合呢,它们共有的元素,其实呢就是交集啊,诶,Return,嗯,Returns是吧,Returns,哦,没写错吧,没写错念错了,对啊,Return啊,这个呢就是求这个交集,那还有一个呢,就叫equals equals这个参数呢,它写成object啊,就相当于是object跟object类里边那个equals呢,这个相当于是呃同名,哎同名同参数的就是判断两个,其实你要想它是true,这呢也得是个集合。啊,也得是个集合,你你你如果实际上这个集合都是这个list或者叫list的话呢,不管要求元素一样,这个顺序得一样了,但你要说是一个set哈,Set,那你只需要看它们这个元素是不是都一样,本身它也无序了啊,你就看元素就行啊,这个呢叫equals,那咱们说的这算是第二波了啊,然后又说了一波,呃,提到一些这个,呃,比如哈尼扣的这个球,叶哈希值,嗯,还有。
03:26
还有呢,叫to对吧,哎把一个集合呢,转化成是一个数组啊,还有呢叫ter,哎便利哎这样的几个方法,看这几个了啊哎一个两这五个啊,六个七个八个,九个,十个,11 12 13 14,还有一个呢,是to瑞它的一个,呃,重载方法涉及到泛型了,所以咱没提,整个呢,相当于是15个方法,呃这些方法这个大家留意一下啊,对于咱们S来讲呢,没有新定义方法,用的就都是这些,对于list来讲啊,那基本上就是我们刚才这个每天一考里边考到的那些增删改查差,哎长度便历啊好这就过了,那么通过这块这个方法呢,咱们也看到了,我们要是用collection这里边像这些我写的这个第二波这些呢,都需要考虑到我去判断你这里边有没有这个元素,有的话呢删除,有的话呢,返回处等等,哎,所以这里边我们要求哎往这里边存的元素啊去。
04:26
去就刚才咱们考的第一道题啊,哎,说说类要能够去重写是吧,哎一口的方法,这个呢,咱们就在这里边,哎非常严肃的声明了这个事,哎,CTRLC,哎这个呢就放这啊呃,然后呢,关于这个collection和集合的,呃,这个collection集合和数组的相互转换,这个呢大家也关注一下,以前呢,咱们用数组,现在用集合,那么万一在某些场景下需要大家用到了,把数组转换成集合,你得会啊,以及呢,有些方法它就是参数叫数组,那你现在呢,操作的是集合,那你就需要把集合呢再转换成数组啊有这样的这个数求这块呢,也需要大家掌握这个里边的操作,第一个呢,就是集合到数组,咱们刚才也提了,叫图尔瑞,反过来调到A瑞里的一个静态方法,哎,所以呢,我们把这个事啊拿过来,哎,CTRLC。
05:24
呃,单独的去说了一下这个啊呃,这个八点就不要了,这个数组到集合这块呢,多说了一下,就是大家写的话呢,呃,其实开发中建议大家写,你就不用去加这个new了,我现在加上呢,是明确的让你看到这是数组到集合了,开发的时候呢,直接把这个删掉,因为它是可变形三啊,这呢,其实它写个T类型的啊,点点点一个小T啊,直接写这个具体的数值就行啊,反而呢倒没事,你非要是加上new的时候呢,要想一点就是这种情况和这种情况的区别。哎,就可以了啊,其实这个呢,也不用大家去死记硬背哈,你能够去理解的,怎么解释呢?咱们说你这个位置放的咱们都是对象对吧,放的是对象,而我们要是放的in的型的123或者是456,其实这123是in的型是不满足这个方法的参数的,你现在呢,诶这个我们去这样去写的,它不会把你看成是放了两个元素,它不会去帮你装箱的,为什么呢?因为天然的这块呢,我不用装箱也可以去理解这个事儿,那就是把你整个看成是一个对象,诶因为咱们说这个数组类型啊,它本身呢也可以,你把这个数组也可以去付给一个object,哎,你或者也可以泛泛的理解,就这个数组好像也看成是object的一个子类一样哈,啊整体上来讲,哎,它就可以去充当了一个元素,我用不着把这里边每个元素再装箱了。
06:52
有一个线成的这个操作可以去理解的啊,所以它就整个看成整体了,而我们这种不一样了,这个呢,人家每个每一个这个元素都是一个对象啊,而我们数组这种写法呢,说跟用可变形态是一样的,所以它就认为你这是两个元素啊,这个呢,就把你认为整个是一个元素啊,这是这个区别,其实开发的时候呢,就我们说的啊,这个new就不要写了,直接放元素就行啊,那在下边哎四过了,然后五五这个呢,我就直接写上了,整整个咱们这一章啊,今天呢,咱们就讲完了啊,对大家要求呢,就是你首先你得根据实际情况会选择一个合适的集合类,集合的时间类,你调他的方法去存数据啊,去取数据,这个事呢,大家一定要掌握,这是最基本的,那在这个掌握的基础之上呢,你再关心一下它底层的实现的数据结构是什么,它的特点是什么,我具体情况呢,应该用哪一个效率更高啊,你去研究这个问题。
07:52
这个不要弄反了,重心呢放在这个源码上了,哎,感觉呢比别人说的都透彻,结果呢,开始去具体用的时候呢,方法是什么都记不住,这就本末倒置了,哎,先有第一点,再有第二点。
08:05
好,接着刚才呢,提到这个叫ter方法,我们关于这个便利呢,单独拿过来说了一下,说便利collection的两种方式啊,这个就两种啊,第一种哎,我们叫使用哎这个迭代器,迭代器就叫eter啊,第二种啊,第二种叫增强for循环,或者我们就叫for each循环,For each咱们这样写的啊,其实你可以这样看着for each这样也可以啊,哎,For each循环,或者你也叫做哎增强for循环。行这呢,就是这两种方式啊,那么。其实这块呢,再多说一句哈,这个for循环呢,咱们也讲过了,其实呢,你会发现在这个collection这个接口当中,它还有一个方法啊,这个collection呢,咱们说这个JDK8之前呢,呃,接口中只能定义这种抽样方法,JK8当中来说可以有这个默认和静态方法。
09:18
那么这个其中有个默认方法。哎,这个不是啊,Default方法也没写是吧,我想找这个for each方法,对,在这呢啊,就因为我们调的时候是能调出来的这个terable啊ter呢是因为咱们这个collection呢,它又实现了叫terable,你看哎,它实现这个接口了,哎,然后呢,我们这里边有个这个方法呢,就叫for each,嗯,其实大家呢,要想遍利集合,可以直接调这个for each方法就行。我给你写一个例子,你看一看,嗯,这我们去新建一个module Java的工程,对零七新建一个包来这呢,我写一个练习吧,新建一个Java class,这我就写成一个collection啊,它的一个测试。
10:22
嗯,站这我写个单元测试方法。哎,这样首先呢,导入一下我们这个unit啊。行,哎,这块呢,我们简单的去写一个collection要都可以了,那这个list set啊,更可以等于new一个啊,这个我们叫collection。啊,怎么整出来这个了,New一个collection,看new collection懵了是吧?嗯,你个这个release,然后呢,往里边呢去加几个元素啊123,嗯456,这我就随便放几个,都是这个数值型了啊放了几个元素以后,我们下面呢讲变例,咱们说了叫迭代器或者是增加for,那实际上的话呢,还有一种比较简单的方法,我们直接呢调这个接口,它有一个方法呢,就叫做for each。
11:16
这叫for each,它呢就可以直接呢去对它进行遍历了,这个for each里边呢,需要填一个叫consumer,这consumer呢,它其实又是一个接口了啊,那怎么做呢?这个我们正好有一个特别合适的一个结构啊,这个呢,其实我要再写,写成最简洁最简洁的一种方式的话呢,就是用到咱们Java吧里边这个新特性了,后边一个叫方法引用,我这样写的,写完了就啊你会说诶没有见过这个东西是吧,这是张二八里边这个新特性,咱们讲到这一章的时候呢,再去讲到会大家就都会了,你先看一看啊,写完了,写完以后呢,我们这时执行,你看照样呢是都可以出来,这呢就是我们使用的叫默认方法,所以呢,JAVA8当中对这个集合的功能呢,又进行了加强啊,诶直接呢,我们可以非常便捷去写,而这个呢叫方法引用,这呢,你看写这个拉姆达啊,这是我们诶扎va巴登的这个一个大的一个形特叫拉姆达表达式啊这。
12:16
呢,涉及到一个叫方法引用的问题啊,这个没有见过,这个后边再说成,嗯,其实呢,这个可以直接调一个for each方法都可以做到啊嗯,行,那具体展开的话呢,这个第一个叫ter,关于它的一个说明,这呢我们在这个PPT里边呢写到了说呢ter它这个对象叫迭代器,迭代器呢也是一种设计模式,那么刚号四大金刚呢,对迭代器模式呢,还进行了一个说明啊这呢就是关于它的一个内容,CTRLC,诶我们就直接拿过来,这是这个说明的内容,哎,这个大家呢要清楚。行,这个呢就不多说了啊,那么我们这个E它的主要作用呢,就是用来便利集合元素。
13:02
那么集合呢,就是容器啊,那么这个集合呢,再明确的说一下,不包括map啊,也就是说只能够便利我们叫collection这个集合的元素啊,行,那么下一个问题就是如何获取实例啊,这个咱们就具体就展开了啊,你首先有这个集合了。啊,第二啊,Ter这个方法它呢,就返回一个实例,哎,迭代器的一个实例了,嗯,下面呢,具体我们如何去遍历这个呢,操作代码量不大,但是所有同学呢都需要去掌握的,嗯,迭代器咱们在这里边明确的去写的。便利集合元素,嗯,这个我们看上面的啊,推荐的方式,首先呢,先有这样的一个,哎,对象啊,这几样代码,这个大家都得都得会写,然后呢,我们调next,还调head next,调next,看这样的几样代码啊,好,那么我们使用迭代去便利的话呢,大家就都这样去写就行,就别按照其他的一些这个方式一啊,方式二这个去写了,呃,都不太专业啊,尤其方式二看着也不复杂,但是这种写法不专业啊,专业呢就是调has next去比好,那么具体的话呢,怎么去理解has next和next,这个咱们有一个图,大家呢,就是诶把这个图呢理解一下。
14:33
后续呢,咱们还会讲到其他的一些类似于迭代器的一些结构,其实因为人家是迭代器的设计模式了,那就意味着这个设计模式它也不光说就在这样一个方面的一些体现啊,在其他方面也会有体现,那么等说到的时候呢,大家也会体会,也也去体会一下啊,也有类似的这样的一个特点,什么特点呢?就你调一个方法的时候,返回一个结构,那个结构的话呢,指针一开始也是指向第一个元素的上面,然后呢,你再调方法,它才会往下去这个指啊这样的一个感觉啊,后续的话呢,一些设计跟它呢是类似,哎,我就先不说了,哎大家以后能够见得到啊,那接下来的话呢,我们关心其中的另外一个方法叫做remove,哎叫移除,就这个迭代器啊,它主要呢是来便利的,但是呢,它也能够帮你呢去诶删其中的一些元素。
15:24
啊,这呢,就是我们说的这个木这个方法,呃,用的相对来讲也不是特别频繁啊,大家呢,可以去体会一下,这呢我们举了个例子啊,在这里边写的这个关于木的这个操作啊,删除这个呢,大家就把这个例子呢,我们拿过来,哎,大家看一看就行啊。啊这个样子,那这个蕊幕呢,我们又呃说了一下,这呢是咱们调到迭代器里的蕊幕,呃,可不是调到咱们这个接这个这个接口collection里边这个瑞幕这个我们把这个呢拿过来,大家诶也理解一下这句话就行啊。
16:01
那这个呢,放到这个对吧。行,这呢是我们说关于这个remove的这个方法的一个调用,哎,大家体会一下就行了,在后边呢,我们就提到这个for意识循环,或者叫增加for循环,首先呢说便利集合啊,这个便利集合咱们呢直接就来写这个例子了,大家后续用的话呢,就可以去使用,也比较简单,需要注意的就是我们这个结构的写法上,跟原来写普通的for呢不太一样了。嗯,这是它同时的话呢,咱们调这个源码啊,调这个底层源码,咱们debug看的时候呢,大家会看到,呃,底层呢,其实它用的还是迭代器啊,就本质上呢,还是迭代器,哎是这样的问题啊呃,再接着呢,我们这个增强for呢,还可以用来便利数组,哎举个例子,这就是这个。CTRLC啊,这就没了,那大家以后涉及到便利的事儿啊,你可以呢,这样的去操作,多了一种方式而已啊,这就过了,没有什么难点。
我来说两句