00:00
那么下面呢,我们来继续看这一个关于卖部映射的其他操作老规矩啊,该我们现在应该讲查询或者取数据这个章节了,那么map这个取数据的形式也是特别多的啊,也是特别多的,那么我们来看看一共有几种形式,第一种形式呢,非常简单,就是把这个map的名称写清楚,后边写上这个K就可以了。啊,这种方式呢,还是比较简洁的,那么这边就有个问题了,什么问题呢?第一种K存在怎么样,K不存在怎么样。那么首先呢,如果K存在,则返回值,这是正常的一个流程,那如果K不存在呢?它直接抛出一个异常,就是not no such element,这个exception。我们要注意啊,在SKY里面K不存在抛异常,但是在Java里面K不存在呢,它返回一个空,这是有点区别的啊,一个小小的区别,那同学们我们把这个呢给大家演示一下,还就以这个为例,我就随便找一个吧,就以MAP4为例了啊同学们,现在我们研究的一个话题是啊,方式一,取出map里面的这个这样写的,那我给他直接演示。
01:20
好,那么这面这面我就直接打印一下,比如说MAP4。刮起来。我写上爱丽丝,那么这个时候呢,因为它有值,所以说直接就返回一个十了,那如果说我这边瞎写一个,比如说爱丽丝一个波浪号,那显然这个不存在,这个时候呢,就会抛出异常抛出。抛,抛出异常,这个异常就是刚才写的no such element exception,我就不写了。好,那么我们来运行一下。好,请看后面这两个,一个是十,一个是异常。好,这个异常呢,就是刚才我说的key function这么一个异常啊,同学们要注意一下,就将来呢,要注意它的一个特点,好,我把这个干脆挪到我们的上面去啊,这样好看。
02:13
好,第一个取得方式我们就讲完了,那这种方式显然它不好啊,为什么不好呢?因为你没完全没有一个防护机制,对吧?错了你就直接抛异常,谁受得了?没有嘛,你就告诉我没有嘛,你哪能说直接给我抛一个异常呢,对吧?要是一般来说像这个不懂的,对吧?以前我们那个时代有些人写的一个web程序,写完了过后,一打开,一打开一个网页,一个404,吓得浑身发抖,是吧?一一堆那个看不懂的,一异常直接在屏幕展现给我们可爱的又单纯的用户,谁受得了啊,一般来说你要把一个页面应该是,诶,一个说页面跑丢了,一个小马在这跑来跑去的嘛,对吧,你整个直接把异常抛出来,而且异常直接抛出来呢,他有可能暴露你的一些内部信息,容易造成攻击,像有些情况,人家看到你的异常,能知道你的函数名是怎么回事,所以说那个现在都都特别严谨的,就说异常信息绝对不能直接抛到页面上,那怎么办呢?好,我们可以看到。
03:13
好在我们的这一个SC里面,它提供了第二种方式,诶就说我们加入一个content的形式,这个也非常好。为什么呢?它可以先做一个判断,使用contents方法先检测你这个K存在还是不存在,如果存在我怎么办,如果不存在我怎么在,诶,那我就可以加入业务逻辑了,好,非常简单啊,那同学们看这段代码呢,我还以刚才那个为例,就是cons加一个B,如果存在我取值不存在,提示一个信息写一下。第二种方式。好,时间的关系,我把这个拿过来,我也演示一下就行了,待会我们再板书啊,同学们,第二种方式呢,可以这样写,为了严谨一点哈,我们这样写啊,前面这个我先把它注销了,因为抛异常。
04:01
好,我写啊if if什么呢?Map是map是点contents,好注意啊,就是这个取的方法,不管你是可变的还是不可变的都是一样的,这个不受影响,那么我写上这个爱丽丝二波浪号。OK,那如果存在呢?它会返回一个帧,于是我就写一句话,就说K存在。Key存在。那么值为多少呢?值等于加,我们的map是点,直接用刚才的一个方法取,写上这个Alice,就是你这个K是什么,我就取回来了,那还有一种情况呢,就是没有,我就直接报一个,报一个信息,就说K不存在,无法取出K。不存。存在没有对应的值啊,写一个笑脸,好同学们,我们执行一下,看这个代码,现在呢,应该提示这个信息了,就不会哦,直接给你抛出一个异常对吧,吓人一跳啊,就这样K不存在就完了,那如果K存在呢?当然那这个是正常的啊,那你这两个两个case存在,那就该怎么样怎么样嘛。
05:10
好,这个形式呢,用的也比较多啊,K存在得失,那比如说我们将来检测一个K存在,我们走一个业务逻辑,K不存在,我们走另外一个业务逻辑,哎,这样就很清晰了,好,但是这个方式呢,还是不满意,为什么呢?哎,他让我写if钥匙,诶为什么你你写这个东西,你还不如直接给我提供一个简洁的方法吗?诶比如像你们学spring mvc,或者有些同学学抓two的时候,它种标签啊,标签就很简单了,说取出来返回一个是不取出来给你返回一个默认值,那这就更好了,那么此时此刻呢,它又提供了下面一种方式啊,这个方式认证啊,我我说的那个方式第四个啊啊,我们先说第三个,它还有一种方式呢,就是用get。
06:03
写成一个K,然后再点get。这个方式呢,它是这样子的,它用映射的名字点get k,这样会返回一个option对象里面,要么是some,要么是no。那这个什么呢?这个sum它其实也是这个open,它是open对象的一个一个子类,那那么我们来看一下啊,还是以这个为例,还是以注意啊,它get的时候返回的并不是这个值本身,而是一个上。上里面呢,可以包含这个字,如果要取还得再get一下,我们来看一下这个东西。好,我们待会儿呢再板书啊,先把这个写完。好,这是我们的第三种方式,第三种方式用的是这种方式,来举个例子。啊,来举个例子。好第三种方式,第三种方式呢,是这样子的啊。啊,就是如果,如果这个K存在。
07:00
存在,那么map get k呢,就会返回,就会返回一个some。啊,里面呢,有你对应的值。啊,然后你再用盖子就可以把这个值取出来,然后就可以取出值啊是这样的,它返回的是一个这个,然后我们再使用这个方法就可以取出来了,也就他要走两步。然后使用这个啊,对这个sum,再用get就把里面这个值取出来了。啊,那么如果说没有呢,就返直接返回一个空,哎,同学们注意一下这个细节,那么第二个如果这个K不存在,诶,它不存在我们怎么办呢?它就返回直接返回一个no。No no,那么这个地方呢,你你就不能再取了,如果你已经是这个no了,那么你再去get就会抛一层啊,有这个不能再get了,好,现在呢,我给大家做一个小小演示,那引见一下啊,因为将来不知道会遇到哪种情况,所以说呢,我都给大家说一下,比如说现在我取出爱丽丝。
08:23
爱丽丝,好,给同学们打印一下,看这个东西是什么。好,打印一下,你会发现它返回的是。后面你们还还会遇到这个some。好,你看它返回的就是以上里面呢,把这个存进去的啊,这是它的一种数据数据处理方式,然后你要取的话呢,简单get就可以了。这样呢,就会把这个sum里面这个值具体取出来走一个。啊,那么这个sum是什么啊,他就取出来了,那上呢,它是option的一个子类啊,Option后面你们还会遇到这个东西,在做原图的时候还会用到。
09:03
当然了,再说一遍啊,如果它不存在。你要这么去取的话呢,这个地方一定会抛异常。为什么会抛异常,大家想一想对吧?抛出异常,因为你已经是一个none了,是个空东西,你再去盖上,那能取出来吧,它必须抛异常。啊,这种形式它就会抛异常。对吧,他说no such element对吧,因为你用这个这个空气get肯定是跑异常的,所以这个方法呢,呃,在一些特殊情况下也会用。那么这个方式三呢,也不够好,好最后一个方法我觉得是最好的,最后一个方法呢,它其实是把方法方法二。做了一个包装就显得比较简洁了,最后一个啊,我们待会儿再整理笔记。那最后一个方法呢,提供的就比较到位了,他用的是get or this,听这个名字就知道什么意思了,Get就说有我就get,否则就是另外一个逻辑,什么意思呢?看这个方法原型是这样的,Get or传入一个K,再设置一个默认值,明白了哦,是这样子的啊,K存在返回对应的值,K不存在返回默认值,Java底层有很多类似的操作。
10:22
那么我直接给大家演示一下这个用法就OK了。也很简单,朋友们。就这样子的啊啊,那么我给大家玩一把。哎,来走一个print,那么我们还以MAP4为例。早点get or get or less。啊,那么比如说我传一个爱丽丝进去。好,我再给他返回一个默认值,比如说默认是默认的值,假设我就随便写个哈哈啊,写个默认值。呃,哈哈,鱼啊,默认值是个什么呢?是一只鱼啊,是一只鱼。
11:03
啊,这个鱼诶,这个还打出来一只鱼啊,好有意思啊,好有一只猫的鱼,它就是一个就就是一只鱼啊,它喜欢吃的是鱼,比如说我们就写到这里吧,就鱼啊,那么我们这样来玩一把啊,此时此刻呢,因为这个爱丽丝在里面有,他就会返回对应的值是什么呢?就是这个十啊,那么我们运行一下。诶,这个时候呢,它就返回了一个十对应的,那如果说我们给他的是一个不存在的,比如说我这前面写了一个啊,比如说两个拨能号,这个时候因为不存在,它底层呢,相当于做了一个else的返回啊,相当于这些这个方法相当于这个get worse被包包裹了一个if里面肯定用到counts了,那么这个时候因为没有值,它就把这个默认值返回看一下啊,这个时候它返回的是默认值与对不对,它这样子就比较好玩了,就简单啊,尽量给我们简单一下,其实就是做了一个包装,也不算什么。
12:04
好,那么我们现在有一个问题了,同学们一定会问说老师那么。既然第四个这么好,为什么还要提供第一种,第二种,第三种和第四种呢?同学们一定有它的应用场景,同学们啊,如果一个东西或者一个技术它存在,大家还在用。你觉得他不好,那一定是你没有体会到它的一个应用场景,如果一个真的这个东西真的就烂的不行了,他一定被淘汰。是不是你看以前黑白电视机。他就被淘汰,谁谁现在还看黑白电视剧,没有了吗?那说明他确实已经没有价值,只要这个东西还在用,那一定有好处,那么我根据自己的一个一个经验啊,一个经验呢,我给同学们一点建议,就是怎么选择,到底用哪种方式呢?我总结这么几点话,雨婷。啊,这是同学们呢,写代码写程序,你们自己啊也要多总结,第一种就是如果,如果我们能够确定,我把这个标成黑色的字体18。
13:09
好,就是这种总结的东西,同学们要自己慢慢学会,自己总结才是最高的最好的一个方法啊,就学完一个东西我自己总结一下,学完一个东西我总结,那么如果我们我们确定确定一个map,确定有这个K啊,就确定map。有这个K,那请大家使用,则应当。应当使用直接用这个map里面这个K,这种效率是很高的,因为虽然他抛他拿不到东西,他抛异常是因为他没有防护机制,没有防护机制说他他的意思就是说我我直接就去取了,那么这个效率呢,他一定里面没有含那个多余的那些东西。所以这个呢,它的效率高,因为你确定它一定有,比如说遍历,我们在遍历一个map的时候,你在用这个get w,那就吃饱了没事干,因为你遍历出来一定是变利到K了吗?所以在这种情况下,我们就有卖普K,这种效率较高,它速度快。
14:13
那一定是有这个原因的,那么如果我们不确定这个麦到底有没有啊,如果啊,如果我们不能确定。不能确定map是否有有这个K,则应当使用什么呢?使用。使用这个,而且啊,还有一点,而且,而且有不同的不同的业务逻辑,业务逻辑那么则使用。使用什么呢?则使用这个map.contents加入content。SS加入。好,Content这个单词是不是写错了,我看一下啊。
15:02
啊,没有写错啊,看起来好像写错了一样。哪写错了?T,什么ain是吧?啊,Taanins cons,好,这个使用这个先判断,先判断,再加入新的业务逻辑,再加入逻辑,因为有些时候呢,我们是要。他不是111个简单的默认值的问题,而是如果有K我们要怎么做,如果没K我们要怎么做的一个逻辑,那一定用这种方式就很简单,因为你这个if里面可以写大量的逻辑,你里面可以加入很多业务逻辑处理,比如说我们在连接这个MYSQL的时候。对吧,这个服务器装不上,我们连另外一个服务器,诶这个呢,它就肯定是有这个逻辑在里面的。啊,所以说如果有含有逻辑,我们要想还有一种呢,就是如果只是一个简单的,就说我有两个选择。
16:00
如果有怎么样,如果没有怎么样,那我就用第三种就是get worse啊。如果只是如果只是啊,只是简单的希望。希望得到得得到一个值,一个值,使用什么呢?使用这个比较好,就是这个方式,你比如说。呃,你们在连麦CQ的时候呢,一般有人可能就是这么去写的,一般假设我们要得到一个IP地址,就连接IP地址或者用户名好,那很多人就是这样写的。啊,比如说我们要去连接一个U,连接一个IP。啊,IP我去取,如果取不到呢,我默认连本地,诶这种呢,也是经常用的啊,就说如果我取到我就取你的,取不到我就连本地啊这种呢,就是简单的一个,就是非此即彼的一个逻辑呢,咱们用这个,我get worse this比较高效,好这是我我自己的一个,呃,一个想法啊,就是说这个效率肯定很高,如果确定有K,你不要怀疑,一定用这个。
17:08
如果说不能确定有K,那么而且你还而且还有不同的业务逻辑,那你用这个contents先判断再加入应该怎么怎么办。这么好,如果说只是一个非此即彼的,就是要么是这个,要么是那个,好那么我们就用这个对吧,因为IP地址可能一般是要么连远程服务器,要么连本地对吧,可以这么去玩,好这是我对这一个的,就是咱们取值的这个四个方法的一个总结,那同学们我们把它进行一个简单的板书。好,前面呢,我们讲到了这个东西啊,讲了四个方法,麦呢取值我们一共讲了四个方法,最后做了一点小小总结。好给同学们板述一下,哎,第一个我们讲的是呃,取值,我们先讲的第一种方式,对吧,很简单,把代码呢也给同学们拿过来。
18:06
具体来说就是方式一。哎,就就全部都讲完了啊,同学们以后呢,呃,要用到的方法几乎都在这里面啊,不会再有其他的了,第一种。第二种啊,第二,那么我把案例给大家板一个过来啊,代码案例。代码代码好,把代码呢给同学们板书到这里,我们第一个方法的代码就是这里。好,非常的简单,诶,不是这啊,取值应该是这啊,应该是这,好的代码说完了。啊,那么这个做完了以后呢,我们又给同学们讲了第二种这个取值方法,就是呃,先判断诶,然后咱们在这个去玩好,这个方法呢,也也很简单,我们就把这个拿过来啊,方式二。给大家阐述一下,那么这是我们讲的,这又是一个知识点,标题三。
19:04
好标题,然后这边我做了一点说明啊,做了一点说明代码呢,我也给他拿过来啊代码。给大家板书到这里来。啊,代码呢,实际上就是我们讲的这一小节啊,非常简单。方法非常简单。好,我说了语法本身呢,都不会特别的难哈,再说一遍以后你们真正的难度呢,是在业务和优化。好,这是又一点,然后呢,我们再来看到这个第三种呢,就是map get,然后再开始注意啊前有些同学可能刚刚用过的同学呢,一般会认为map.get k就直接返回这个值了,在Java里面好像是直接返回值吧,我记得但是在这呢,它做了一个包装。啊,它返回的是一个上,然后还得get一下,这是需要同学们了解的啊好,我这个呢,就直接拿过来了,好的,这是我们的第三一个。
20:01
好,这是第三一个,也给同学们做了一个说明,对吧?诶然后呢,这个是小结,我把代码呢也给大家拿过来。好,把这个挪到上面去。好,那么我把代码呢给大家拿过来,大家一看就知道代码。来反述一下好,这边呢,我要简单的给他排一个号啊第一个。好,第二个第三个。好,我把代码呢给同学们把出到这儿,就是我们的第三种方式,哎,就这个形式好吧,好,给大家放到笔记中去。这是我们说的第三一种方式,那么第四一种方式呢,是我们推荐的,就是相对来说呢,比较简洁啊,比较简洁是这么一个东西啊,OK啊,这是它的第四一种方式就是get worse。好,给大家板书到我们的笔记中去。标题三对吧,诶这个是它的一个基本的他的方法的一个签名说了一下说明,诶就是K如果存在怎么样,如果不存在又怎么样,对吧?代码呢也给同学们拿过来。
21:15
诶,代码。代码如下。好,代码呢,就是讲的这一小节,非常简单。非常简单。好,最后呢,呃,对这个还做了一点说明,就是如何选择,呃取值方式啊,如何选择,哎,选择取值的取值的方式啊方式,那么这个呢,就是个人的一个理解,没有什么标准的答案,同学们啊,咱们学技术呢,没有说一定怎么样啊,在工作中呢,呃,就是要自己动脑筋,好,我把这个给他拿过来,这是我自己的一个理解啊。好,就是怎么选择。好,第二个好,这是第三一个,讲完了截取一段视频。
我来说两句