00:00
第十个特性呢,我们来谈一谈这个集合啊,集合呢,Collection啊,以及呢map啊,这呢,我们提到说如何能够快速的去创建一个只读集合。啊,这呢,我们是在这一批269当中体现的这样的一个特点。啊,那这里边的话呢,我们目的呢,就是为了创建一个只读的不可改变的集合,我们看看如何去做这个事儿啊,那这里的话呢,我就直接呢,写在我们这个,呃,张阿九这样的一个代码当中了,啊呃,这里边已经写的比较多了,我这儿呢再去新建一个包。嗯,新建一个这个package啊,诶,Com点艾特硅谷点啊JAVA1好新建一个包啊,在这个包下面呢,我们来说明一下这个集合的一个问题啊,这里边我去新建一个class啊,我就叫做collection啊,我们也加上map啊,避免了大家认为map呢属于collection的一个子接口。啊,它俩呢,其实是个并列关系啊,这里边的话呢,这两个结构啊,我们都来提一下。
01:01
好,那我们现在这个目的呢,是希望啊创建一个只读。哎,只读啊特点的这个集合。哎,那我们来看一下如何做这个事儿。好,那如果呢是以前我们怎么做这个事呢?可能更多的我们习惯上这样去做哈,那这里我以一个list为例,这里我们放的是string形的数据,哎,你一个a list。这个创建完以后,这呢,我用的是空参构造器啊,诶我向这个集合当中呢,去添加几个数据啊,比如说Tom。嗯,再复制几个啊。And Jerry。啊,比如说这个李雷啊,再加一个韩妹妹啊,凑个对啊。行,那我添加了这几个数据以后,我们怎么把我们当前这个例子变成一个只读的呢?啊,这个我们相当于是啊操作相当于是调用,哎,我们这个叫collections中的方法。
02:12
哎,中的这个方法啊,然后呢,将哎我们上面的这个list。这个在我们这个idea当中比较烦人哈,这个双击F的话呢,就变成这个搜索了啊,老是出来,哎,将这个list呢,相当于是变为。只读的。行,这样来调用collections点啊,叫unmotifiable list,将我们这个list呢放进去。行,那放进去以后呢,我们在这个位置,我们al enter一下,给它生成一个新的变量啊,比如我这张就叫做一个new。看list,那此时呢,我这个new list它就是一个只读的啊,我们可以呢,先遍历一下它内部的这个数据,那便利的话呢,咱们在这个JDK8当中啊。
03:01
哎,JDK8当中呢,我们是讲到了这个拉姆达表达式啊,那这里我们就可以简单的去写一写啊,比如说这个new list多了一个方法叫for each方法啊,在这里边我们使用一个方法引用。哎,方法引用呢,属于这个一个特别的一个拉姆达表达式了,行,那这呢,咱们就编利成功了,那整个这个方法引用呢,其实就充当了我们这个for each这个方法的一个实参了,所以呢,方法引用也好,拉姆达表达式也好,在我们这个Java层面呢,都是作为对象出现的。啊,这个我们不多说,这是扎R8当中这个特点,有不清楚的同学呢,在咱们这个商户的官网当中,大家呢,去下载啊JAVA8这样的视频啊,去看一下啊回头呢,我这里边呃,录的一套基于JAVA8的这个呃,Java基础的视频啊也会呢放出来呃,大家到时候也可以呢看一看。那此时呢,我们执行一下。诶,这是没有问题的啊,是可以执行成功的,那如果呢,在这个位置,大家试图呢,对我们这个new list再做一个数据的添加。
04:07
啊,比如说加上一个叫team。行,很显然呢,是不可以的。那这就报错了啊,报了这样的一个错误,呃,因为此时呢,咱们这个呃new list它是一个只读的,就不可以再做这个添加的操作了啊,这个我们说啊,不能执行啊,否则啊报异常。行,这呢是在咱们以前的这个,呃,这当中做的话呢,是这样,那再举一个例子啊。嗯,如果呢,稍微简单一点写也可以,那就是这样来处理了,我直接呢去调用一下,我们这个叫collections。点啊unmofiable list那这块呢,我直接使用一下这个叫呃数组这个工具类啊,然后as list这呢,我们就简单点啊,我写个123。
05:01
好,那out enter一下啊,此时呢,我们创建了一个新的list啊,这个我们叫list。那叫他了啊,他呢,也是一个只读的。啊,这也是个只读的啊,那如果你试图给这个例子呢,去做一个数据的添加。啊,他也会报错来执行一下看看。哎,你看这是同样的原因是吧,啊,出来这样的一个异常了啊,那它呢,也是一个只读的,比我们上边这个呢,要写起来稍微的方便一些了。啊方便一些,这呢是针对于咱们这个叫list来讲的。哎,针对例子来讲哈,那下边呢,我们来看一下,这个叫哎,Set,我们想创建一个set,它也是一个只读的,这应该怎么做呢。如果我们希望写的稍微简单一点。啊,稍微简单一点的话呢,那就是借助于数组,嗯,但是数组这块的话呢,它创建的呢,呃,是一个list啊,数组跟list呢,是一一对应的关系啊,都有序可重复。
06:01
那这块怎么办呢?我们可以这样。哎,首先呢,Collections点叫unmofiable,呃,List,呃,找赛。在这对吧,好,那这里边呢,我们去new一个哈,Yet。哎,用一个这个哈。嗯,那哈,我们out enter一下啊嗯,Out enter不行,这个我们需要一个提示啊。啊,这个哈赛首先我们把这个先小框补起来啊,在这里边,然后呢,Ctrl out斜杠,哎,我们里边呢,是可以来放一个。嗯,放一个什么呢?我们想放一个具体的一个collection,那就是放一个list了啊,这里边儿我可以这样做。哎,CTRLC,哎,我们呢,放在,嗯,对,放在这个位置啊,CTRLV一下。好,那这个放好以后,我们把这呢收起来,哎,然后在这儿out enter。哎,生成一个具体的set。啊,这就是set了,那set呢,我们也变了一下啊,For each。
07:04
哦,这呢用这个,嗯,这也行哈,这是以前我们这样写,那现在的话呢,你塞点放一下边这个啊。好,那执行。那这里边儿数据呢,也是123啊,这呢不是咱们主要说明问题,想说明呢,还是在这个位置呢,你想给这个set当中去再添加一个数据,它也是不可以的啊,因为它也是一个只读特点的。啊,这也是报同样的这样的一个议程啊好,这个就不多看了,嗯,那针对于我们的list set,说完以后我们看看这个map哈,以前咱们如果想创建一个只读特点的map。怎么去写,稍微稍微简单一些,那就得是这样了,Collections点,刚才呢,也看到mofiable下也有一个针对于map的这样的一个方法。
08:04
我们可以往里边呢放一个map。那既然可以放个map呢,我们就去new一个啊哈希map。看这样子啊,那你有一个哈希map,那此时呢,它内部是没有数据的,我们呢想往里边呢添加一些数据。那最简单的一个写法呢,大家注意,我们可以这样写,我在这个位置呢,加上一个大括号。好,大家看啊,想一想,我们那会儿呢,说了一个新的语法的特点,叫做diamond operator啊,算式操作符,那此时呢,相当于我用的是不是就是JAVA9的这个语法呀。啊,因为在JAVA8当中,我们说这个匿名这个子类的对象和我们这个,呃,监控号算是操作服呢,是不可以共用的啊,所以我这个操作啊是适用于九当中,那在这里边我做什么事呢。既然我这提供的是一个哈希map的一个匿名子类了,我就可以在它内部呢加上一个代码块,哎,在这里边我写上这个铺的方法,哎,大家看是不是非常的巧妙。
09:08
哎,我这呢值,那不妨呢,就表示的是它的这个成绩了啊,然后我们多来几个Tom。Jerry。啊,Jerry是88,这个猫和老鼠里边明显这个Jerry的这个情商呃,智商都高一些啊啊这呢,我们再来一个team。哎,这个呢,来一个,哎,比如说68好,那这样的话呢,我们就创建了一个map光标放在这al enter。哎,生成一个map。好,那这个map的话呢,我们也去便利一下可以啊,当然这里边儿我们主要工作不是便利,只是呢,我们顺便呢,想看一下它内部的这个数据啊。我们这里呢,也调了个。上面的这个for each呢,呃,不管对于list来讲,Set来讲也好,都是一个数据,而map中呢,是存放的一对数据了啊,Ctrl out斜杠这里呢,我们用的是这个叫啊BY啊consumer啊第二这个方法,然后by consumer里边它呢是接收为两个这个参数啊,接收为两个参数,没有返回值,那我们这呢,需要呢去提供一个by consumer的一个实现类的对象。
10:19
哎,那这块呢,大家呃,如果呢,对Java扎JAVA8比较了解的话呢,我这呢就这样直接来写了哈,K逗号V我写一个拉姆达表达式了,哎,s.out。第二看普拉那。这里边我们可。哎,冒号啊,加上一个V,哎,这就可以了啊,这呢是咱们的拉姆达表达式。啊,其实大家呢,看我们这个JDK源码的时候呢,已经有很多的这个这个语法啊,开始使用这个拉姆的表达式了啊,那后期的话呢,这个框架当中也会呢体现这个拉姆的表达式,所以大家呢,没有学习障二八的同学呢,啊,一定要把这个障二八里边这个新语法呢去学习一下,主要呢,就是拉姆达表达式啊,以及后边呢提到的stream API。
11:06
啊是这样的行,那咱们呢执行一下啊,我把上面这个呢都注释。好正常就出来了,它就出来了啊行,那这个呢,大家也看到了,我们输出的这个顺序呢,跟我们添加这个顺序呢,是不一样的啊,因为本身我们提到map中存放的数据呢,本身就是无序的啊,本身就是无序的啊。好,那这呢是咱们以前说想创建一个只读特点的list set和map呢,是这样来写的啊,这是针对我们这个,呃,JDK8之前啊。GTV8啊,以及。哎,之前。哎,这样的一个做法。啊,这呢,我还给了这个两种这个方式啊。那下边的话呢,我们来说一下这个JDK9啊。
12:04
GP9当中啊,提供了更加方便的方法。大家看一下。嗯,那在九当中,那我们直接来写了啊,大家看我这呢写个list啊,是我们这个list本身它啊,嗯,里边呢,我去调用一下of方法。啊,第二个购物方法啊,那很显然这里边需要依赖于什么呢?我们在GDK8当中说到了,说接口当中呢,还可以去定义我们所谓的叫静态方法,而静态方法呢,是有方法体的,所以大家看到我直接通过接口来进行的一个调用,哎,那这个O方法里边我们呢,随便调一个了啊,我这写一个123。好。那此时呢,我就生成了一个新的list,那我说呀,此时的这个list它就是只读的。啊,创建制度的集合更加的简单了,直接一个方法就搞定啊,我们先呢便利一下啊,For。
13:14
好,执行。那这就可以了啊,然后呢,当我们试图想象这个例子当中,咱们去添加一个新的元素的时候,这时候呢,是不可以的。这时候呢,是不允许我们向这里边儿来添加的。哎,我们看到呢,这时候呢,就同样的报了这样的一个异常。啊,这个呢大家知道了,然后呢,咱们来看一下这个set。啊,Set list,包括map呢,其实这个方法呢,都是一样的啊,都是用的我们这个一系列重载的方法。那S里边我们哦一下这个,咱们就呃也是啊用这个。这一类型来表示了,因为比较简单哈。好,生成一个set。
14:01
啊,那此时这个set呢?当你试图给它去添加一个新的元素时,它就是不允许的。哎,这个就错误了。啊,这个呢,把这个关掉,那再接着我们看一下这个漫画。那卖换的话呢,也是一样,也是第二这个O方法啊,O偶方法里边注意。因为这个麦啊,它比较特别啊,它存放的数据呢,是间值对特点的。啊,它不像我们的set或者是list是一个一个的数据,那我们通过这个方法的参数呢,就看到了key value,就依次呢这样去写,中间呢用逗号隔开。哎,就行啊,那我们就就这个参数的话呢,它其实可变多个的啊,你想写几个都行,所以呢,你这块呢,就直接来写就完了,比如说我这个键呢,是叫做姓名还是写的Tom。好逗号,Y呢,写上他的年龄啊,23,然后再来一对Jerry。
15:02
哎,然后呢,22。哎,再来一个。啊,这个李雷。逗号啊,12。啊,再来一个这个韩梅梅。哎,我们呢,让韩妹妹是18岁。这个呢,我们说这个男人的话呢,都非常的专一啊,不管呢,男人是20岁40岁,60岁还是80岁,我们呢,都喜欢18岁的女生。啊是吧,好,那这时候呢,我们O完以后out enter一下。这我就生成了一个map。那此时的这个map的话呢,我们说它也是一个只读的,当你试图来向它这里边再去put元素,比如说叫TIM啊33。哎,我们执行一下看看。哎,你看仍然呢,就保这样的一个异常了,所以呢,此时的我们这个map呢,它就是一个只读的。啊,大家要注意我们这个O里边的这个写法啊,PY6PY6中间都是用逗号隔开的,这是方法一。
16:08
哎,Map相当于它呢创建。创建只读。啊,相当于这个集合的这个方式一啊,那它呢,还有另外一个方法,毕竟呢,它稍微特别一点。它呢,是建筑队特点的。啊,那我们说这个map当中啊,它放的数据呢,是建着,对其实呢,Map应该这样来说啊,Map中放的数据呢,它其实呢,就是NT。啊,或者你叫个node也行啊,它是entry啊,那就是说map当中,它其实是这个entry类型的数组,还是一个一个的数据,而这个entry里边呢,它包含两个属性,一个属性呢是K,一个属性呢是value。哎,我们说map里边呢,放的叫建质,对,其实呢是呃把它呢忽略了啊说呢叫建制,对的,那其实呢,它放的还是一个一个的元素啊,是N垂类型的,好,那我们这块呢,就相当于是,呃,有点像是就直接面对于K和VALUE6了,那也可以这样来做map呢,有个方法叫of entrance。
17:18
哎,叫of entrance,然后在这里边的话呢,我们就可以直接呢去给大家去提供这个entry了啊,那这个怎么去写呢?嗯,我们可以这样来做啊,直接我们调用map点,然后呢,Entry。哎,在这里边我们去给大家添加值,比如说Tom。二三这是一个,然后呢map.n。啊,这个呢,叫Jerry。逗号,然后呢22。哎,这样呢,我就写好了。嗯,写到外边了。嗯,22,这个21吧,都行啊好,这呢也是一种方式,哎,我们在这儿al enter给他呢去,呃,声明一个叫MAP1。
18:07
啊,这样子啊,那此时我们这个MAP1呢,它仍然也是一个只读的CTRLCCTRLV,诶,我们试图往MAP1中去添加数据,大家看一看。哎,也是不允许的啊,那同时的话呢,我们去便利一下你看看啊。那便利的话呢,咱们就简单一点,直接卖一点,哎,我去做一个c out得了。好,这呢就也列举出来了啊,没有问题啊啊,那此时我们创建这个集合,呃,保证它是一个只读特点呢,在张VA9当中有更方便的方法了,就是来调用我们这里的购物方法。啊,这个O方法呢,是从我们这个JDK9开始啊才有的这个方法啊,在这写了啊行,那这个特点呢,就说完了。
我来说两句