00:00
可以说今天讲的内容呢,是核心,也就是说我们前面讲的那么多,其实都在为我们这个应用做准备,是吧?啊都在为应用做准备,那今天呢,我们先给同学们讲数据结构的下一个章节叫集合操作,换言之就是怎么去对集合进行各种操作,来实现我们的这个计算的一个功能。好,那首先呢,开篇名义我们简单一点,直接一点,直接抛出一个问题。抛出一个问题,然后引起大家的思考,这个问题非常的简单,非常简单,什么问题呢?就是这有一个list的集合,里面放了什么呀?三个元素分别为357。那么讲到这儿呢,我要多说一句话啊,就是我们大数据的一个最重要的特点,它是希望对大量的集合里面数据进行这个处理。处理完了得到一个新的集合,比如说你这是一个集。
01:00
啊,这是一个集合,处理完了过后又得到一个集。那得到一个结构呢,他希望进行下一步的处理,进行再得到一个新的级,这种特点在我们大数据里面应用的非常广泛,也就是说大数据它把整个这个,呃,我们的这个处理的这个力度,这个力度啊,不是那个有力气的力,这个力度它整大了。原先我们常规的Java也好,像传统的编程语言呢,一般是一个变量传进去,然后进行处理,得到一个新的变量。啊,新的变量,那么现在这个大数据它有个什么特点呢?它的处理的数据,因为数据量特别大,而且是批量处理,于是他做这个这个马丁奥德斯基呢,他就再这么做了一个扩展,就是整体一个级传进去进行处理,处理完了再做这个新的机构再进行处理,它有这么一个逻辑在里边,那么所以说我这讲的是集合的一个映射处理。
02:03
注意同学们,我这虽然写的是麦普映射操作,千万不要认为是对麦普这种,千万不要认为是只对麦普这个集合再进行操作啊,是指的对,是指的是集合进行操作,这个集合可以是任意的集合,可以是我们的这个,呃,Sequence的,也可以是我们的这个,就是map的,也可以是我们的这个set的啊,注意这个细节,那么讲到这我们继续说。那么这个集合想干什么呢?对所有的元素乘二,将其结果放到一个新的集合中返回。那么集返回新的集合是什么集合呢?好,我把这个地方应该写成大写的更合理一点。返回的集合呢?是在每个元素基础上都乘以个二,请编程实现。好,同学们,对于这个题来讲,我我觉得如果同学们在没有学这个脉搏音收之前,也是可以轻松搞定啊,这个太简单了,思路很简单嘛,就是我拿到你这个形进行一个便利。
03:10
便利过后便利。我把这个遍历,遍历的每一个元素进行一个乘,乘完了以后,过后我把它加起来,返回到这个新的集合里面去,最终就拿到了。这个思路特别简单,而且也非常好理解。好我们先把我们先用传统的方式来解决,解决完了过后呢,我们来分析一下它的优点和它的缺点,从而引出我们这个scy map映射的一种具体操作。好同学们打开我们这一个idea,然后呢,我新建一个章节,这个章节就是我们的第11章。好,这个实际上我们取个名叫CHAPTER11。CHAPTER11,好,先看第一个案例,第一个案例我们取个名字叫做什么呢?Map的第一个DEMO01啊,Map操作的第一个,你是一,最好这样写啊,Operator operator操作啊,注意啊,这个map呢,指的不是那个那个集合那个map,而是它的函数名刚好叫map。
04:16
啊,OK,好,同学们,我们来演示一下这个使用效果,非常简单啊,代码。好,需求呢,先给同学们拿出来了,哎,先把这个需求写到这里。好需求。需求呢,先给大家摆到这个位置,特别的简单。特别简单。好写到这,那因为这个代码呢特别简单,老师呢,就不不再写了,特简单的一段代码,同学们都能看懂,我就直接拿过来用一下。没有任何问题,相信同学们这个能看懂,好,我简单做一点注释,好这个呢,就是我们这个集合,好这个集合我写的是一个历史的集合,大家应该马上反应出来,它是一个不可变集合里面的,因为它在包里面生命的,所以拿来用。那么这个是我。
05:03
我创建了一个新的集合,这个集合我准备放什么,准备放东西啊,我准备。啊,我准备放入,放入新的这个内容。新的这个内容,那么这个地方就是一个变历,大家一看,我对历史的一进行了一个变异遍历,完了过后我做了件事情,干什么呢?对这个变历出来的元素乘了一个二,然后累积到LIST2里面去。啊,累积到这里去,就是相当于说对元素。对原数乘二。然后加入啊,然后加入这个list list2这个集合好,最后呢啊拿到这个集合,我们最后呢就做完了。啊,这个地方返回的应该就是这样一个集合,就是list,注意听啊,就是我们的什么呢,呃,六。十和七代码写完我们运行一下好啊,六六十十四啊,不好意思,这就60和14,因为我乘以二了,好再写个LIST2。
06:04
注意听啊,第一第一这个地方呢,刚开始这块只要明白了,后面就easy,好同学们,我运行代码,我运行代码,我们运行这段代码呢,它返回的结果就跟我们想象的应该是一样的,好同学们请看输出结果完全的正确,60和14好代码就写完了。那么针对这这段代码呢,我们来分析一下它的优点和它的缺点是什么来,首先呢,我在这写上这么几个分析好来把这个优缺点我给同学们板述一下。好,优缺点我阐述一下啊,对上面传统的方式,传统的方式啊方法来解决问题的小结。哦。小结,第一点,我们先说它的优点吧。啊,任何东西肯定是它的有它的优点嘛,我觉得它的优点呢,有这么几点啊,第一点呢,首先它这个比较处理的处理这个方式,处理方式比较直接,比较直接,而且呢,特别好理解,非常好理解,很好理解,相信同学们都能理解,就是便利就把它扔进去了吗。
07:18
啊,这个方法就比较直接好理解,但是缺点我们要分析一下,你有优点,你的缺点在什么地方呢?好,我们看缺点也是非常明显的缺点,而缺点首先我第一个分析出来它的缺点就是。不够简洁,你看你写这么多代码才搞清你写了这么多。是吧,这是第一个,它就不够简洁。啊,不够简洁,不够简洁,不够高效,这是第一点啊,代码看起来就没有一种模块化编程的感觉,所以第二点呢,我们可以看出来,它没有体现出函数式编程的特色,二没有体现,没有体现函数式编程的这么一个特点,因为刚才我在讲这个基础的时候,我曾经讲过,这个卡呢,它特别提倡是把一个集合经过一个函数处理,得到一个新的集合,然后再交给另外一个函数处理,再得到一个新的集合,这里没有体现出这种感觉。
08:21
啊,就没有体现出这个特色啊,什么特色呢?就是集合,注意听这个集合交给就就集合交给一个函数。哎,交给函数,然后得到一个新的集合,是这么一种特色。对吧,因为你在这直接就写了代码嘛,啊写一段,其实它下面还可以交给第第二个函数,然后又得到一个这个集合啊,这样子他没有体现出来,好第三点呢,这个下面一点第四点啊,还有一点第三点,第三点就是说如果我们将来对这个数据就说啊,我现在只处理了一个逻辑,就是把它乘了一个二,我就完事了,那么如果我再做一个处理成了二以后。
09:07
我希望对这个元素再进行过滤或者扁平化,诶你这个就比较麻烦了,它还有什么呢?就是这个不不利于,不利于不利于处理复杂的,复杂的数据,复杂的数据处理业务。啊,处理业务,因为你们将来做这个处理的时候呢,这个需求可能不是简单的乘以一个二,你可能有好多好多需求。你比如说先成立二,再进行过滤,过滤完了过后呢,我们还要进行这个简化,简化完了还要折叠,折叠过后我还要进行排序,你你这样写代码就非常难写了。因为你这就你这个逻辑特简单,就乘一个二嘛,那将来我刚才还有一堆需求,比如说成了二以后,把这个是偶数的给我过滤出来,形成一个新的集合,再比如说呃呃,循环偶数过后,你还要进行一个化简,找出里面最小的,找出最小的过后呢,再给我排序,好你这样去来吧,你这样就一堆代码。
10:09
显然这个结构就会处理乱,因此呢,我们分析出来它的优点就只有一个,就是好理解,但是同学们也知道,好理解的东西有时候往往啊呃出,往往这个好理解的东西呢,它它这个东西就不是那么那么高效的,你们以后就知道了啊,然后好理解的东西特别简单,但是代码一般都会特别长,而且那个模块化编程呢,体现不出来,好同学们,那么我说了它的一些优点和缺点之后呢,我们来进行一个简单的板书,然后呢,我们就提出自己的一个映射的方式了啊好,首先我把这个呢给大家板书一把,这是我们数据结构之集合操作。好,新建一个章节,给他一个标题一,哎标题一,那我刚才呃给同学们讲了一个什么东西呢?诶,我先做讲的是map映射操作,我做了一个啊,就是引出这个问题的啊,一个一个描述啊,首先我提出了一个需求,引出大家的思考啊,这个也符合我讲课的一个特点,对吧,就说同学们学东西呢,也是这样子,这这个你肯定是一个需求导致的嘛。
11:22
那么这个需求完了之后,我们使用传统方法解决了,传统方法解决就是呃,这个传统方法呢,具体来说把这个代码给它放过来。好,传统方法的代码是什么样子呢?代码如下来走一个小小箭头,把代码呢给各位朋友粘贴下来。好,刚才我们写的代码呢,Very easy啊,同学们应该都能看懂。好,我把这段代码呢,直接给同学们板书,到这个位置代码就写完了啊,写完以后呢,我们这个代码做了一个小结啊,对代码代码做了做了做了一个分析和小结,我们小结到了这么几个特点,它的优点和缺点啊,把它拿过来。
12:07
把它拿过来对吧,首先我说它的优点是什么。它的优点。啊,优点就是这么两点啊,啊这么一点啊,一个是这个还有缺点也给大家说出来了啊,缺点也说出来了。好,呃,那么有这么一个分析过后呢,我们自然就导出我们要讲的内容了,好,第一个问题的抛出我们说完了。
我来说两句