00:00
第二种方式是什么呢?第二种方式是这个方法。啊,这个方法。这是第二种方式。就是说我们调这个entry set,可以把一个map集合转换成一个set集合。明白吧,啊,就这个方法啊,以上这个方法是通过什么呀?啊是通过是把什么呀,是把map集合直接全部转换成。Set集合啊集合。S集合中元素的类型是什么?是map entry。是卖点。安各位。是这个。明白吧,啊,是一个map这样的一个东西。如果用图形来表示的话。大家看啊,是这么一个东西啊。
01:01
你。整个这个东西注意看啊。嗯。哎呀,这样我给大家画一下啊。这样。嗯。来,好好画一画啊,好好画一下。假如说这个就是那个map集合。对象M啊,Map吧,Map啊。来,我这画一下啊。来,走。走。啊,然后呢,这个位置这是一个。啊,是类型。类型啊。然后呢,这个地方有个value,各位。
02:02
Value是四准。然后这个位置它存的是一。234。然后这个位置存的是什么呀,是张三啊。张三啊。这存的是李四。这个位置存的是五啊。这个位置存照六。好来大家注意看啊,你如果掉了这个map集合的entry set这个方法。返回一个set,里面存map点什么呀?叫entry。然后是integer。Map in teacher,然后接下来是一个set。
03:02
只要这个方法。调这个啊,这个方法注意看啊,这个方法谁调啊,只要是说这个map调这个方法了。那么现在它会变成什么样呢?它会变成一个S集合,各位。啊,就它会变成这样。变成这样啊,这是个。就通过这个方法,它就变成这样了。就是你只要调用我们的一个map集合的entry set这个方法,它就会把这个map集合变成这个set集合,而set集合里放的对象,这是一个对象,明白吗?哎,这是个对象。一个对象。然后两个对象。啊,三个对象。
04:02
嗯。四个对象。你四个剑之队?映射成四个对象,其中每一个对象它的类型是什么?类型是map点安区类型。Map entryi string这个类型。明白吗?就这个是这种类型,这个也是。啊,这个也是。明白吗?哎,包括你这个也是这几个都是。都是什么呀,都是这种类型。就这种类型啊。这是个对象。各位。那这个对象里边。他有两个属性。明白吧,哎,有两个属性啊各位。
05:00
我们可以看一下这个map点安里面有什么属性是吧。还有一个object key属性,还有一个value属性。严格意义上讲,这已经不是object。这个位置是什么?是string。就这个对象啊,你这个对象有两个属性,一个K一个Y6。你这个也是一样的,这里边有个什么呀,叫in key这个属性啊,Integer value这个属性。有KY了。啊k value可以看一下。看一下谁的这个哈希map吧。Map啊,然后这里边儿应该是有这个叫做class。Entry。Entry class entry来看一看class。
06:05
好,大家看看这个啊,Class node大家看它实现了一个map.ent这是个接口吧,这是个接口啊,然后这个node大家看这里边是不是有kick value。这个是不是就是他。Map鹌啊。那这个node里边是不是有一个K和一个value啊。你看那个代码。所以严格意义上来说,这是不是一个no的对象?这实际上是一个no的对象。从哈金map源码里边看到是他是个node对象。啊,然后这个no是个节点,这个节点里面有K,有谁有value。是吧,这不有K吗?对不对,哎,有VALUE6,你看是吧,有K有VALUE6啊。
07:01
所以你调这个map集合ENT set这个方法转成set了,把它转成set集合了。啊,大家来看看这块儿,如果说采用这种方式便利的话,我们该怎么做。嗯。还是上面这个map集合,各位我们调什么呢?调它的一个方法叫entry set方法。好,大家看这个方法,返回一个set里边存安吧。是。对吧,哎,那返回一个集合个位啊。Set集合,这个set集合里面存的是map点什么?Entry类型是什么呀?Integer和string。这是一个set集合,然后我们能不能对set集合便利啊,电力set集合取每一次取出什么一个node?便利散的集合。For循环也行,迭代器也可以,都可以啊,来我们迭代器吧。
08:03
迭代器的话,那应该是迭代器。迭代谁呀,你每一次迭代的元素就是这个元素呗。是不是哎,迭代它迭代它等于什么呀,Set点什么呀。那Y要循环一二点还next,如果有的话,一二.next取出的就是这个吧,哎,取出一个什么呢?你想你S集合是里边存的这个东西,然后呢,调用它的方法返回的是个什么迭代器,迭代器每迭代一次,你取出的是不是就是这个东西啊。对吧。这是不是安垂对象啊?对吧?map.entry in论entry点它有个方法,因为这个entry其实就是那个node。明白吗?就是那个node,就是刚才大家看原代表的node node不是实现了这个吗?所以我们现在这个调这个no的一个方法,这个方法叫什么呀?叫做get,你看是不是get key返回一个什么in teacher吧,好,通过no的对象点get什么呀?Value是不是返回一个value啊,好,大家看这个K和value是这样去取出来的。
09:19
你看是吧。对吧,哎,你看。Eer这个方法拿迭代器,拿到迭代器时迭代,迭代过程中每迭代一次取出一个节点,这个节点调get,调Y。调k get k get value方法就这两个方法啊,这两个方法来看看。是吧,哎。为啥非得获取一个K,不能帮我们写好一个方法,直接便利,不能便利这种东西你哪知道啊,便利你看现在我们是输出。对吧,这个第49行是我们是输出,但实际开发中啊,你获取了这个K和Y6就不一定是输出了。
10:00
你有可能是别的呀,那这没必要封装成一个方法呀,因为我们不是所有情况都是便利,都是输出啊,我们在便利卖卖集合的时候,是把麦麦集合里的东西拿出来啊,做一些别的事情啊,所以这个没必要封装啊,没必要封装,但你这个你得你得会写。你得会写啊。这种方式还有什么呀,哎,我们呢,哎这种方式啊,这种方式。那么这种方式如果不是迭代气势增强的方式,该怎么做呀?For each的方式呢,For呗,什么类型,各位这个里是不是这种类型。对吧,No吧,这是不是那个S集合。是不是好,那是不是就直接输出no.get t加上一个等号。行吧,哎,叫no.get value啊。行吧,哎,这是增强缝啊。
11:02
增强放这个还是那个类型。这是那个sat集合啊。是不是哎,Set集合拿到,然后是set集合中的元素吗。然后拿到之后呢,Get k get value600这个意思。你看。是不是一样的,哎,一样的啊,那么有的老师,那咱们以后用哪种方式,用上边这种还是用下边这种,我说一下啊,下边这种效率比较高。比较高,为什么,为什么说这个效率比较高。原因是你上面这种方式啊,你是获取到K之后,再通过K去这个哈希表里边找元素,找这个Y流。这是需要耗费一定时间的,而你下面这种方式呢,实际上是把你的k value放一块儿的。对吧,Node这个对象里边就有这个属性,这个node对象里边就有这个value流属性,你直接get就行了,所以这个效率要高。这个比较适合于大数据量的情况下,建议使用这种方式,各位啊,数据量不大的话,你可以用采用这种方式没问题的啊,没问题的第一种和第二种方式大家都要会啊,大家都要会。
12:13
嗯。注意啊,这种方式效率比较高。因为获取value,获取key和value都是直接从no的对象中获取的属性值啊,这种方式比较适合于大数据量。啊,大数据量。行吧,这几种方式大家都要会都要会啊行了,那这块关于map这个接口里边的这些方法,我就讲到这儿,就讲到这儿啊,有put呀,Get呀,Clear呀,Key呀,包括这个value吗?是不是啊。是否为空啊,通过key来删除建池,对啊,Size是不是,哎,Values,哎,这个是获取所有的什么呀?哎,所有的这个key啊,下边这个呢。
13:07
这个是说把map集合转换成一个set集合。啊,这个S集合里边每个元素的对每个元素的类型是什么,是这种类型。啊,然后呢,我们把这个取出来,是不是for each就行了啊for each就可。这个应该还行吧,能看懂吧,这是个内部类,各位啊,内部类点过去你看。这是个内部接口。是不是你看只有内部类,还有内部接口。这外边是一个什么大接口是吧?哎,里边是不是一个内部接口啊。对吧,你看这是个接口吧,对吧,哎,内部接口实际上就是个内部类啊内部类哈希map这块体现内部类你看。哈希map是一个map类,它实现了一个map点安垂这个接口,然后这里不是node吗?对不对,这是节点。这个节点上有四部分,组成哪四部分?哎,有哈希值,有K,有value,还有谁呀?有下个节点的内存地址,这分明是个单向链表吧。
14:04
大家看看这是不是单向链表?这是不单链表,单向链表,这个节点有下个节点内存地址,没有上一个节点内存地址,这个哈希map底层是不是一个单向链表啊。单列表吧。是不是,哎,它是个单向链表。行,到时候咱们再看吧,行吧,先休息一下十分钟啊。
我来说两句