00:00
那讲完list和set之后呢,下边我们来看一下这个map接口,诶map接口再强调一下,跟collection呢是并列的两个接口,Collection呢存储的是一个一个的元素。哎,我们map里边呢,存储的是一对一对元素,这里边儿呢,所谓的一对一对呢,其实指的是这种建制,对特点的数据,一个key对应一个value啊,比如我们现在想刻画,比如张三是吧,考了呃70分,那李四考了90分,那这个时候呢,我们就可以使用这个map这个结构呢进行存储了,那其中呢,前面这个张三李四这个呢,就相当于是这个K了,然后呢,这个70分90分就相当于是我们诶提到的这个Y6这个值了。好,那我们来看一下这个map这个接口的一个使用啊呃,那这块呢,也要用到这样的一个结构了啊,CTRLC一下,我们来看一下这个map。好,打开以后的话呢,我们这块呢,就提到了map的一个使用了,咱们前面呢,讲集合框架的时候呢,提到这样的一个学习的一个递进的关系啊,先来讲一下针对于具体的特点的数据选择相应的接口的主要实现类会实例化,会用常用的方法。
01:01
啊,第二呢,就是接口当中不同的实现类的一个区别,这呢是我们在第12当中啊,12章当中我们要讲的这个内容,那对于我们这个map的话呢,我们也要讲这两个事儿啊,那这里边儿呢,就提到了相当于这个层次二,诶讲一下这个不同的实现类的一个对比问题。啊,这块呢,其实也提到了像哈奇map元素的一个特点,呃讲完这个的话呢,我们再来谈一谈常用方法,大家理解呢,会更好一点,所以呢,我们呃,讲完上面这个事儿之后呢,我们再来看一看这个关于我们说的这个叫层次一长的方法有哪些。所以呢,我们先来说这个问题啊。好,那么这个map的话呢,刚才也提到了,它存储的是这种键值特点的数据了,类似于我们高中讲的函数,实际上呢,是完全对应的一种特点。OK啊,那这个对应的特点呢,我们一会儿再说,现在说一下它。常用的一些实现类,OK。这呢就提到了第一个叫哈map,然后第二个呢,叫link的哈map。咱们前面提到说哈set和link,哈set呢,有一个词浮力的关系,他们呢其实也是如此的。
02:05
OK,然后下边这个呢叫map map的话呢,跟我们这个map呢,这算是并列的关系,然后再往下呢,这个叫啊也是并列的关系,再下边这个呢,叫properties,注意这个哥们呢,长得呢不太像是一个map。但是他真的是一个map啊,它呢是继承于这个哈希table的。所以呢,是有这样的一个关系。好,那首先的话呢,我们来说一下,就是这些实现类之间的区别是什么。OK啊,这呢,相当于对应的也会有一些面试题了,那其中的一类面试题就问一下,说哈希map呢和哈希table哈哥俩呢有什么区别,那咱们先把这个哥们呢往上提一下啊。来,我们来看看他俩。首先呢,就提到了我们这个哈map呀,它是一个map中的主要实现类,言而呢,就是大家呢,去需要一个map的这个场景的时候呢,基本上你不用思考太多,你就一个哈map呢,作为一个默认的选择就可以了。
03:02
呢是我们map的一个叫,哎古老实现类。一说到这儿的话呢,大家就可以想到咱们前面讲的叫A和。Vector是吧?啊,也是这样的一个特征啊,那前面呢,我们提到呢,像list的时候呢,这个对应的list和这个list是GDK1.2的时候呢,增加的vect呢,是1.0的时候,其实他这呢也是同样的特点啊,比如我们在这个API的这个层面呢,看一下啊。看一下这文档。首先的话呢,我们看下这个叫哈table啊,一进来这时候呢,就明确提到了,它是一个1.0,相当于呢,就是有JDK的时候呢,我们就有这个叫哈table了,而且呢,你看一下它的名字,这个T呢,确实是小写的。可能是一开始的时候呢,在命名的时候呢,一不小心呢,给整成个小写了,那后边呢,只能是将错就错,一直不能改了是吧。那因为呢,你要是一改的话呢,别人用过的话,这不就没法再用了,所以就得一直消息了。谁知道这当时定义这哥们儿是睡着了还是咋着了是吧?
04:00
嗯,好,然后呢,这个map的话呢,我们进来看一下。在这儿它呢是一个接口,这个接口呢,跟我们的list接口一样,都是1.2时候能引入的,然后呢,对应的这个主要实现类呢,叫做哈map,基本上你也能够想到了,它呢,也是在1.2的时候呢引入的。所以从那个角度上来讲的话呢,它呢,确实是一个古老的实现类。啊,老道的话呢,名字你看都不对应是吧,OK啊行,那这呢是我们说的一个点,然后另外一个点的话呢,它俩的特点呢,跟咱们讲的A和呢还是一样的,它呢是线程。不安全的是吧,呃,那下边这个呢,是线程安全的,然后对应的话呢,安全,那就意味着你这个执行的效率呢,就低一些是吧。哎,那上面这个呢,执行的效率呢,就会高一些。诶,OK啊,那这个线上安全和不安全性呢,其实也非常容易看啊,诶我们先看这个哈希table吧,CTRLC一下,然后呢,CTRL。诶table啊,17也好,八也好,进来进来以后的话呢,你看到他相应的这种方法,它都会加一些这个的一些修饰了。
05:03
哎,那就表明呢,它是一个线程安全的啊,那对应呢,如果我们去看一下叫。哈希,Map。那这块我们进来以后,相应的一些这个方法的话呢,你就找不到这个C空的这样的一个标识了。那找不到,那就意味着它是一个线程不安全的,OK,行,就是这样的这个特征啊。那对应的我们这个release和VE也是同样道理,你要看的话呢,它里边呢,就加了ne这样的修饰了。这是一个点,然后另外呢,它俩呢还有一个区别,这个呢是一个健壮性的区别,对于哈希map来讲呢,它是可以。哎,我们这样写啊。要可以添加。加的和value值。哎,就是我们这个添加的这个键值的时候呢,它是可以为no的啊,而我们下边这个呢哈,Table呢,是不可以添加no key。或外流值的。哎,有这么一个特征啊,那说到这儿的话呢,我们就可以呢,做一个演示。
06:04
哎,针对这个map呢,我们来做一个测试啊,单元测试啊,第一个。行,那这块呢,我们就先声明成是一个map吧,又一个哈希map。诶用一个哈map啊,然后呢,咱们先提前预知一个方法,这个方法就是添加元素的这个方法了,在map里边呢,添加呢,用的这个叫put操作。哎,这个呢叫put了啊,这个put呢,里边放一个key,放一个value啊,这个位置呢,刚才提到了,你可以呢,放一个no key和no value。诶发完以后的话呢,我们这里呢,去打印一下当前这个map来走起。哎,你看这时候呢,是没问题的。所以呢,它这个健状性呢比较好一些啊,诶这个怎么去理解呢?就是你比如说我们从这个用户的这个客户端,它发送这个数据呢,到我们这个服务器这块了,服务器这块呢,咱们是用这个Java程序呢写的这个代码了,然后呢,用户呢发的这个比如说叫姓名,这个叫年龄啊,这个呢叫其他的一些信息,然后呢,发过来的时候呢,我们去获取它这里边的,其实发过来的时候呢,也可以是这种键值特点啊,我就找呢,你这个name叫name的这个值是多少,比如说叫汤姆。
07:09
这不就得到了,诶name呢是相当于它的这个键,然后呢,诶值呢就是Tom。啊,这个呢,就是键值中间我用这个符号呢,连接了一下啊,那也有可能有一些选项呢,用户根本就没有填。没有钱的话,你这块去获取的话呢,就没获取到,可以理解成呢,就获取个not值,那这些数据的话呢,我们要是放到map中的时候呢,就支持我们是填写这个not值的,所以它的兼容性呢要好一些啊,然后呢,我把它呢CTRLC一下。粘过来啊,这个呢,我们叫T2了,把它呢换成叫哈希table。换成以后这个呢,我们就不用刻意的说他俩都是no了啊,咱们就让一个是no,你看这种情况呢,都不行啊,我们去做一个run。哎,他就报错了啊,控制针异常是吧。哎,不行啊,因为这时候我们在添加这个元素的时候呢,我们需要呢,计算一下这个K的哈希值来计算的时候呢,你这个相当于是个no呢来调的,所以呢它不让啊,所以呢它就没有我们这个健壮性好,那我们把它呢去掉以后,咱们换一个啊。
08:10
哎,Map这个我们还是调这铺的方法,这呢我写一个,比如说A啊,它的这个Y60呢,是个no,说Y60NO行不行,走起。也不行是吧。呃,也是一个控制人,所以他这个要求呢,就比较高一些,换句话说呢,他这个健壮性啊较差一些。那相对来说我们的哈西呢,要更好一些。好,这呢是我们说的这个特点啊呃,然后呢,再要讲的话呢,就涉及到了这两个结构,它底层使用的这个存储的结构不一样了,也就我们所说的数据结构不一样了啊这个哈希map呢,其实咱们呢,就是对应的前面讲的那个set的时候呢,讲到的啊,因为呢,我们说呢,哈希set底层就是哈希map了。所以说这个哈,Map底层数结构呢。哎,这个我们说呢,底层。使用啊,首先呢,提到了这叫数组是吧,然后加上一个呢叫单向。
09:00
列表。然后再加上一个呢,叫做诶红黑树这样的一个结构呢,进行的一个存储。啊,这个结构。存储啊,这个呢,针对的是咱们JDK8的这个场景。这呢是咱们哈希map,它底层使用这个数据结构啊,那么在JDK8之前的时候呢,是没有这个红黑树的,诶当时我们讲到这个第14章的时候呢,我们JDK7这这个八呢,我们都看一下啊。啊,那么包括呢,我们说为什么要加红位数,到时候我们再讲,然后呢,对于我们这个哈希table来讲,这个哈希table的话呢,它其实就比较传统了,然后呢,它底层呢,就是使用的数组加上单项链表,哎结构进行存储的啊,所以这块我诶也同步的,我先粘过来,把这个红黑数呢,我们就给它去掉了。实际上呢,以前的话呢,我们说这个哈希map呢,也是如此,只不过呢,呃,出于这个性能的考虑呢,又加了一个红黑数,那哈希table呢,本身就不用了,所以呢,也懒得去改了。那你可以这样去理解啊,好,这呢,就我们说的关于他哥俩的一个对比。
10:04
啊,大家呢,要清楚,因为呢,有一道比较老的这个面试题,或者叫笔试题啊,就让我们去区别一下。啊,或者要对比一下咱们的哈希map和这个哈希table,这呢是其中的一道题啊好,那么涉及到其他题的话呢,那就涉及到这两个结构了,咱们把这哥们儿呢,就往下移一下了,他呢就已经退出历史舞台了,现在目前呢,它的唯一的意义呢,就是作为一个面试题出现了。还有点儿价值是吧,除此之外呢,就不用考虑它了,然后下边的话呢,我们来看一看叫link的哈希map。前面的话呢,我们已经说到link哈set了,Link哈set的底层就是link哈希map,所以这样一说的话呢,基本上这个特点呢,你也都猜的八九不离十了啊,首先的话呢,这个它是我们哈希map的一个此类。诶,它是哈希map一个此类,然后呢,我们接着就从这个底层的使用的这个数据结构出发了,啊,它呢,在哈希map使用的数据结构的基础之上。
11:01
是吧,使用的数据结构的基础上增加了。哎,一对双就是增加了双向链表啊,一对也行。哎,双向列表,哎,增加这个双向链表干什么呢。呃,用于记录添加的元素的先后顺序。先后顺序啊。那你记录一下他们,听下先后顺序,有什么好处呢?对吧,啊,进而啊,我们在遍历这个元素时是吧。哎,就可以按照添加的顺序呢,是不是显示了。哎,剩下的顺序显示。这个呢,咱们在讲这个link哈赛的时候呢,其实演示过这个事儿啊,那这块的话呢,我们也可以呢,做个演示回过来,诶咱们把啊再新建一个啊。
12:02
好,这个呢,是我们这个test的一个三。嗯,这个位置啊,我们扭一个叫link哈,Map OK啊好out,加一个回车啊,这是一个map。可以了啊,然后map里边我们呢去咱就先用一下这个put方法,这呢就是添加的一个操作了啊,比如这块我们叫Tom啊,这个随便我们就写个数了啊,然后map.put这时候呢,Put里边这个key whether呢都是object类型的啊杨一呢,就是我们目前呢,其实可以呢随意一些啊。啊,但是我们真正的用这个map的时候呢,一般的这个key和value的类型啊,通常都是确定的哈。比如我我就随便写了,比如你有一个这个date了,哎,我就这么着来了啊。好,这这一块我们导入一下,比如YouTube下这呢,我就添加了这样的三个元素,接下来呢,我们去便利一下,咱就简单一点,直接呢去s out了啊。好,这时候我们看一看,咱们这时候显示的这个顺序啊,我说呢,就跟我们添加的这个顺序呢,是一样的。
13:02
哎,你看这是KY6中间用一个这样的符号来连接了啊,Tom先出来34的,然后呢,就是这个CC的,你把这个呢往上提一个,然后我们再去执行。哎,那么跟我们刚才的这样的一个添加的顺序呢,还是一样的,这个呢,就是由于我们里边呢,使用了一对双向列表啊,那底层咱们就先泛泛这样一说啊,第一个元素在添加的时候呢,它可能在这儿了,第二呢可能在这第三个在这儿,所以呢,它在添加之余的话呢,我们就用这个指针呢,是指向了一下,诶谁添加先添加的,谁后添加的。这样一个过程。OK啊行,这个呢,就使得我们在便利的时候呢,能够按照你添加的顺序呢去显示。啊,那么这个好处是什么呢?哎,我们说呢,对于。啊,这样说吧,开发中。诶,对于叫频繁的便利操作。哎,建议是不是使用此类呀。这里就提到了,说咱们默认的话呢,是用哈map了,但是如果说呢,呃,你在一个呃程序当中,我们需要频繁的啊,我们经常看看说哎呀,这里边这个元素都有什么,都有什么经常去调,那这时候呢,不妨你就用link还是map。
14:08
因为在它这个底层的数据结构之余呢,我们又记录一下谁添先添加,谁后添加的,这样你在便利的时候呢,速度会更快一些。啊,这个呢,就是它的一个具体的场景啊。好,那这个说完之后的话呢,这自然而然的就会涉及到他俩的一个对比。呃,当然这是它俩的这个对比呢,目前来看呢,呃,跟这个面器比呢,后边这个频率出现的要低一些啊。诶,这个还是一个叫区别。诶哈希map和,诶我们的叫link哈希map。OK啊,那么前两个的话呢,你发现他们对比的时候呢,其实就是一个是新的,一个是老的,底层的数据结构呢,其实传统来讲呢,基本上是一样的啊。对,直播呢,是GD8的时候,我们有一个更新了,这个更新呢,因为这个不用了,所以没有及时更新,就不去管它了啊,所以呢,看到有一些区别了,主要的点还是因为呢线身安全不安全的一个考虑啊,不想用了。建设性呢,当然也有点儿区别。
15:01
好,这呢是从这个我们正常使用的角度来看它俩,然后呢,这俩呢,就是纯粹从这个底层数据结构的角度来看。啊,因为这个数据结构呢,这块呢,稍微有点不同了,所以这块呢,使得我们在什么场景下去用它也稍微的可以提一下。哎,这俩注意一下,好,那么我们关于这俩就说完了,然后下边这块有个叫map。Tree map的话呢,其实我们在讲tree side的时候呢,也已经提过了。吹塞的底层就是一个吹map,所以说呢,它呢是使用啊叫底层使用的叫红黑树存储。OK啊好,那么它使用红黑数去存储,红黑数的话呢,它其实是一个排序二叉树了,就是它在诶添加这元素的时候呢,这个元素二叉树就是里边有两个叉了啊,这个元素呢,需要跟下边的元素呢,做一个比较典型的一个,比如这三个元素的一个特征吧,假如这个数呢是15啊,我用一个数来表示的话啊,然后这个左边这个质的数呢,都比它小。比如说这个呢,就是五是吧,然后幼稚的话呢,都比它大,比如说30。
16:02
这样情况,然后五的话呢,是不是又会有分支啊。哎,这个呢,比如说二,那这个值呢,你注意它得比五大,但同时还得比15小。啊,比如像个十这样的数是满足的,然后30这块呢,是比30小的,那肯定也比15大是吧?啊这块比如说这个17啊这个呢,比如就是呃,30多的这个数,就是它每一个值单独的看三个元素都满足,左之呢比它诶这个顶点的这个元素呢要小,然后呢,右值这个呢,比它顶点的元素呢要大,哎都满足这样一个特征。啊,这个呢,就是一个叫排序二叉树了啊。好,那红因素呢,就在这个基础上呢,它有的,比如一个红的呀,一个黑的呀,这样个特征的啊,简单了解一下,那既然呢,这里边我们看到它有这个大小之说了,那其实呢,就涉及到排序的问题了,说呢,哎,我们可以。按照。哎,叫添加的。啊添加的,我们在讲吹塞的时候呢,说叫添加的元素的指定的啊属性的大小顺序。
17:02
来进行一个便利是吧,当然这块的话呢,我们这块呢,就不能说按添加的元素的指定了,因为呢,我们tree set里边呢,是一个一个的啊,你要添加元素了,那tree mapb的话呢,是不是就一对对的。这得说清楚啊,按照添加的,呃,我们说呢,叫KY6中的这个K。啊,它的呃,T元素的哎,它的指定的属性的大小顺序的经典里。比如说咱们这个K呢,放的是一个学生。然后呢,这个value呢,放的是他的成绩,那就是你这个学生这个对象的,比如说学生的姓名,学生的年龄是,哎,按照它里边的这个指定的属性的大小顺序来进行便利了。OK啊,那吹set里边涉及到两种排序方式,那map呢,也是同样的道理。啊,需要呢,考虑使用啊,第一种我们叫自然排序。啊,第二种啊叫定制排序。
18:00
诶,OK,这就是这样一个情况了,好这呢就是关于这个tree map的一个使用map呢,同样的不是咱们的一个重点啊,然后呢,我们这个主要的重点呢,还是在自然排序和定制排序这块呢。OK啊行,因为呢,我们在这个花map里边也有红位数啊,所以这块的话呢,红数这块呢,其实我们通过哈西map呢去了解就可以了。然后呢,这个接着往下啊哈,Table它呢有一个子类,这个子类呢叫做properties。啊,这个单词你会念啊properties,嗯,这个类的话呢,首先你注意啊,它是一个map,虽然长的呢,似乎呢离这个。是吧,长得差的有点远了。毕竟这块呢,已经隔了好几代了,都是吧。结果呢,哎,这个你可能这个。好几辈是吧,这个长得特别帅,然后到这块呢,已经。不太像了是吧?哎,这已经隔了好几辈了啊,到这呢,已经有变化了。好,这个pro的话呢,首先它也是实现了咱们这个麦接口,所以说呢,它里边存储的也是键值对哈,那么它存储这个建筑有个特点,就是键和直呢都是string类型的。
19:08
啊,这个其实我们看API的话呢,它也有具体的说明,你把这个pro往这一放啊,点开一进来,它在这个位置是吧,说每一个key和它啊对应的这个value呢,在我们整个这个property啊,建制队啊,一个呢就是一组啊在这个例子当中有好多个嘛,然后呢,都是string类型。哎,就是建筑队里边的键和值都是死钝类型,说的呢非常明确啊。好,这个呢,我们就说其T和哎Y6哎都是string类型。嗯,OK啊,那这个properties的话呢,毕竟毕竟作为一个子类了,它可能会增加一些方法了啊,那这个proper呢,我们就要问它主要是干什么用的,诶我们说呢,常用来处理属性文件哈。诶,到时候呢,我们讲到properties的时候呢,我们把它举个例子说明一下,大家就明白了。好,那么这样的话呢,我们就把主要的map这个接口的实现类呢,咱们就讲了讲涉及到这个面试题,这是一个,这是一个实际上呢,还有一个最高频的那是关于哈希map的一个理解了。
20:12
哎,这呢,就涉及到哈希map,它的一个底层实现。啊,你要提到这个底层实现的话呢,这个我们就提到了它的这个数据结构了。但是你要光说一下,说它是数组加单元链表加红位数,还差点意思,所有人都会说。问题是他怎么用的呢?是吧,这个呢你要展开来讲,所以这块呢,我们要讲哈希map的底层实现的话呢,呃,就要提到两个问题,第一个问题呢,就是你在new一个哈希map的时候呢,底层都做什么事了。是吧,这是第一个问题,第二个问题的话呢,我们刚才也提到了这个map呢,往里边添加数据呢,它用的叫put方法,那么我们接下来呢,就要往里边去调这个put添加一个,添加一个key,添加一个value啦,然后这个放的key和value到底是怎么放的。是吧,哎,这就需要呢,跟底层这个数据结构呢,有一个交互了。
21:02
诶,那么这儿呢,是我们要讲这个问题的一个重点,OK啊,那这个问题的话呢,咱们在咱们当前第12章当中呢,就不重点来讲了,这个是第14章里边这个重点问题,也就是说我们讲的这个集合框架里边这个层次三的这个问题了。OK啊,这一章呢,我们主要还是说前面两个层次的问题,那刚才呢,咱们就把这个map当中的这个主要实现类这个事儿呢,咱们就说清楚了啊好,说清楚以后呢,我们下边呢,主要来看一看这个叫哈希map,把它的这个元素的特点说一下,然后我们再讲方法呢,大家心里边就有数了啊。好,接下来我们说这个第二个问题,叫哈希map中元素的一个特点,那提到这个特点的话呢,我们看一看这个课件啊。诶,课件里边呢,我这有个图,通过这个图呢,咱们把它说清楚,哎,大家就能理解了。假设呢,我们这里边儿啊,左边呢这是K,右边呢是value啊左边你可以理解成呢,是叫学生的姓名吧。哎,有叫AA的BB的CC的DD的好,右边呢是它对应的,比如说考试的成绩啊好了,那么这呢是一个K,右边呢对应一个value啊,左边一个K,右边对应个value,这个就是箭头表示对应关系的意思了。
22:10
哎,那我们这里边就会发现呢,你看a ABB CC DD是吧,左边这块呢,哎,如果呢,看成是好多个T的话呢,我们用一个圈给它一包,这就是相当于K构成了一个,也算是一个集合了。然后右边呢是Y6 Y6的话呢,我们也整一个啊这个比如说集合呢,一包是吧,那这呢也算是个集合了,那这里边儿我们首先看一看啊,这个K的集合和Y这个集合有没有什么特点。啊。有没有什么特点啊,就是主要呢,我们现在关注的是这个类型上哈。啊,你比如说我们这里边儿这几个K。是不是相同的呀。或者说能不能相同啊。哎,注意这时候我们说就不能相同,比如说A呢是90分,你说我还有个AA是80分。那你说这是我们怎么区分他俩呀?
23:01
是不是就群不了了是吧?哎,所以这里边儿呢,我们要求这个K啊,彼此之间呢,是不相同的。哎,是不相同的,那么它们不相同,他们这个位置是依次挨着的吗?那我现在放成是了是吧,其实的话呢,是不是的。啊,其实不是的啊,呃,换句话说呢,咱们不是前面讲过那个set了吗?当然我也说了这个哈希set。它的底层其实就是哈希map是吧,所以咱们在讲说,诶你这个哈赛放一个元素,这个元素放这儿,第二个放这儿,第三个放这儿,实际上咱们说的呢,都是map。哎,也就是说map当中的第一个放这儿了,第二个放这儿了,第三个放这儿了,实际上呢,它也不是依次解密放的,说白了这个map的话呢,它也不能算叫连续的了,是吧。啊,也是一个无序的,不能叫有序了啊,所以说这里边儿注意一下啊,针对于咱们map当中的T来讲的话呢。哎,它呢不能相同。然后呢,也是一个无序的,这个无序的话呢,其实大家也可以简单点回到我们这个层面,咱们这不上面说这个哈map嘛是吧哈,Map的话呢,我们往里边添加几个元素。
24:10
是吧,这么着了,然后呢,我们这呢,去做一个run啊,你也可以简单看一看,你看这里边儿打印出来这个顺序呢,跟我们填的顺序不也不一样吗。你要有趣的话呢,这不就得是。按照我们添加这个来的,而且还得依次紧密排列,显然呢,你看连顺序都不一样,所以它肯定也是无序的,对吧。好,那么既然呢,这个K呢是不相同且无序。不相同且无序,A是不是就是个了?因为里边放的数据呢,不就是不可重复的,然后是无序的吗。来注意啊,所以说呢,我们如果单独看K的话呢,构成的一个集合其实是一个set集。OK,所以呢,你也可以称为它叫key set。OK,好,下面我们来看这个Y6啊,这个A呢考了90分,BB呢,我们说是不是也可以考90分啊。所以说这个Y6的话呢,是可以相同的哈,那么这个Y6的话呢,它是呃依次解密放的吗。
25:06
或者说符不符合这个例子的这个特点呢?意思呢,就是可以重复有序是吧,那么可以重复吗?这个可以重复有序吗?没有序是吧,对,因为它的存放位置啊,取决于我们的key啊,Key是无序的,它是不是就也无序了,所以这个呢,不满足了,言外之意呢,你这个value呢,它不是一个list啊。他不是一个例子。它呢是可以重复的,但是无序不是list,那不是list,那咱们只能泛泛的把它称为呢,你算是一个collection吧。因为collection collection里边放的是一个一个元素是吧,也没有说collection有什么特点了,所以你就算成collection得了,OKK呢,是一个set,那Y6这块呢,你可以理解成就是一个collection,好,那我们再来看。这呢叫key,这呢叫value,咱们说map里边呢,放的是一对一对的数据,实际上的话呢,呃,严格来讲呢,其实map中放的呀,也是一个一个的数据。
26:05
啊,就是我们看到的放的一个key,放的一个value,其实呢,这个key和value是作为某一个类的两个属性出现的。啊,那我们往map中放了一个K,放了一个value,其实呢,是把K和value呢组成在一起,造了一个这呢一个名叫entry了,啊,造了一个en这个类型的一个对象,把这个对象呢放到我们map里边了。严格来说,Map里边放大其实也是一个一个的对象。哎,这个注意一下,所以说呢,如果我们把K和wedding呢,就看成是个整体的话呢,这就是一个entry啊,就是叫这个名字啊,这是一个entry,那这儿呢,相当于是不是有四个N垂了。好,那么下边我们看看你说这四个N,它们要是合在一起,算是一个什么样的集合?啊,无外乎呢,就是看首先相不相同。彼此之间。
27:00
不一样是吧,因为咱们说这个K都不一样了,你再配上一个value,是不是只可能说更不一样是吧。对啊,那那这儿呢,因为K呢已经不一样了,所以呢这个entry呢也不一样,所以呢不重复有序吗。无序啊,因为呢,你看我们这个key呢是无序的,所以你合在一起的话呢,对应的这个entry呢也是无序的,所以呢,呃,又不能重复又无序。是不是就是一个set的特点了?所以这块呢,我们这个entry的话呢,可以呢,也起个名叫entry set。就是多个entry构成在一起,其实就是一个set的一个特点了。好,这个呢,咱们就说清楚了啊,那这个说清楚以后呢,把这个事儿呢,咱们回过来描述一下,大家脑海当中你就浮现咱们刚才这个图啊,这儿呢,咱们注意说的是哈希map,为什么我们强调是哈希map呢?因为吹不是这样子的。啊哈,Map呢,又是咱们主要时间类,所以咱们就以tree map呢来理解啊好,你看刚才我说的这个事儿,这个我们说呢,这个。
28:02
嗯,哈希map中的。哎,所有的key是不是,哎彼此之间。是。哎,这件事啊,不可重复的。哎,是无序的是吧,哎,所以呢,我们说呢,就构成啊,或者叫所有的这个key呢。就构成一个几是吧。哎,构成一个set集合。好了,那既然呢,它构成一个set集合,换句话说呢,这个我们set里边呢,你可以理解成放的就是一些key了,那set里边放的话呢,我们有个要求。当然了,这里边咱们是哈希map这个set其实就是哈希set了啊,第二这个哈希set的话呢,里边放的元素咱们要求怎么着呢。是不是要重写相关的方法了,所以呢,就是对应的我们这个K呢,要求所在的类呢,要重写什么呀。是不是得俩方法啦?对一个呢叫哈西扣的方法和E扣的方法。
29:02
啊,这两个呢,都要重写的啊,这个就说完了啊,下一个那么哈希map中的所有的value。哎,彼此之间。是。啊,可重复的。对,是无序的。啊,那这块呢,我们说既不是个list,也不是个set,所以我们只能说呢,所有的value呢,就构成了。呃,一个咱们就叫做collection集合了。啊,那莱几课呢,咱咱咱们也提到过了,他呢要求啊这块呢,就只需要重写一个方法是吧。哎,所在的类呢,要重写是不是equal口子就行。哎,这样就可以了。行,这个没问题啊,好,然后接着我们再往下。哎,这呢就提到说哎哈希map中的啊一个K。啊,或者叫一个KY6嘛,就构成了。
30:00
哎,这呢就是一个建制,对啊,就构成了一个叫entry。啊,相当于呢,你一个entry里边呢,就包含一个K,包含个value啊,就构成这个ENT垂好,那下边呢,我们要关心的就是mapb当中啊,所有的entry彼此之间是。是不是又是不可重复的误区的?所有的这个N垂啊。哎,这个我用个小写的吧。好,所有的这个entry呢,彼此之间是不可重复的,是无序的,所以呢,哎,我们说所有的。哎,Entry呢,就哎构成了一个set集合。啊,这个的话呢,咱说就不用考虑这个事儿了啊,因为呢,N的话,具体其实里边就是K和你只需要呢考虑K呢所在呢,去该重写重写就可以了。好,这呢,就我们想给大家强调的这几个事儿啊,所以呢,这块呢,关于map这块呢,大家可能觉得哎呀有点绕,怎么着呢,诶K呢还得重写俩,Y6的话呢,这也是个对象了,还得重写一个啊,有时候呢,加上我们前面呢说的sat要重写俩啊,历呢重写一个。
31:05
就乱了是吧。说到底重新俩还是重新一个。这么细。怎么办?对。哎,怎么办,就是你少写不行,多写没事是吧,所以说呢,大家以后,哎,涉及到了我们关于往集合当中添加这个元素,这个元素呢,所在的类,我就不管你是往list了还是往set了,还是往map中放了,Mapb里边又得看K和Y6,太复杂了,我们干脆。是不是只需要呢,把这个类里边的两个方法都重写一下。所以呢,我们经常会看到呢,就是大家在诶这个重写的时候,你发现呢,这俩不就都放一起了吗。所以放一起,你干脆一点就把它俩都生成一下,生成完以后呢,这个哈后呢,有的场景下就用不着,比如说你是放到list里边的。比如你放到map里边这个value的位置的用不着,用不着就用不着呗,反正我放这也不错是吧。哎,大家以后都这样处理就可以了啊。好,这呢,咱们就把这个map的啊,时间类的一个特点说清楚了,哈希map这个元素的特点就说清楚了。
32:06
这个清楚以后呢,咱们再来看这些方法呢,大家会更清晰一些。行,咱们就先说到这儿。
我来说两句