00:00
好,那么下边的话呢,咱们针对于集合这一章呢,咱们做一个复习了啊,找到我们这个零三对应我们这个第12章啊打开。行,看一看我们这一章呢,主要讲的这个内容啊,首先第一个点的话呢,我们提到了这个集合和数组的一个对比啊,因为以前我们讲过数组,所以呢,首先我们谈了谈数组呢,在存储数据方面的一个特点和弊端。啊,存储。数据啊方面的,这个还特点和弊端,这个呢,大家做一个了解就可以了啊,然后接下来的话呢,我们引入到就是整个Java当中集合框架嘛,这块涉及到都有哪些具体的API了啊,这个呢,就是集合框架的一个诶概述啊,在这里边呢,我们也提到了,关于集合框架呢,我们讲的一个逻辑哈,层次一,层次二,层次三提到这样三个层次,第四呢是递进关系的。然后再往下的话呢,具体的我们就,哎首先呢,是讲了讲这个叫collection,哎,它的这个常用方法。诶,这个常用方法呢,对于我们接下来讲它这个子接口呢,是有帮助的啊,所以下边呢,我们就紧接着来讲一下它的两个子接口。
01:01
第一个词接口叫做list。哎,关于它里边呢,常用的API的一个使用了,然后第五个呢,它的另外一个子接口set。就这么着了啊行,哎,这两个呢就完事儿了,然后呢,在下边呢,我们就讲到另外一个跟collection并列的这个接口叫做map接口。哎,它的一个使用行,然后这个完了以后呢,最后我们再说了一个工具类是吧,叫做collections。诶,工具类的一个使用好,整个咱们这一章呢,其实就讲了这样几个问题啊,好,那么回过来,首先第一个问题说数组呢,在存储数据方面的特点和弊端,诶这儿呢,我们提到了它的一些弊端问题,现在呢,我们讲完集合了啊,大家目前再来看呢,确实呢,数组在存储数据方面呢,是比较单一的啊,就是依次紧密排列的。啊,要有序的是可以重复的一个数据了。啊,那如果我们有更复杂的这种数据存储的需求,那首先呢,我们要考虑的都是集合了。
02:03
包括呢,即使我们用的是数组,有这样特征的数据,咱们完全也可以使用,是不是就是A来替代啊。哎,对的啊,哎,咱们在这里边讲说list这块呢,叫动态数组,实际上呢,准确的来说啊,这个动态数组的这个头衔啊,咱们应该给到a release。因为呢,Link list毕竟底层它也不是数组了,是吧,所以更精确来讲呢,我们替换数组的结构是谁呢?应该就是a list了。换句话说呢,List就是把数组封装起来,以前呢,不是说增删改查,你得自己写嘛,说现在不用了,你就把这个方法呢,封装到我们这样一个类当中,这个类呢起个名就叫。啊,你只管往里加,你也不用考虑说不够了怎么办,我就自动给你扩容了。哎,所以完全的这个就看作是数组的一个替换了。那可能有同学说,既然如此,那数组是不是就不用了?啊,还是有它的用处的啊,就是因为它还是比较基础的,或者从数据结构的角度来讲,数组它一般呢,就叫做顺序表了。
03:03
哎,就是在数据结构里边呢,它叫数据表,在咱们Java里边呢,咱们叫数组啊,有的这个语言里边叫列表。就是叫法不一样啊,那数据表呢,属于数据结构里边最基本的一种数据结构了。啊,或者换句话说呢,你看咱们release也好,哈希map也好,这不都是底层相应的有数组这个结构吗?我们在平时开发当中,如果比较简单直接,咱们还照样的啊,可以使用这个数组,OK。行,那么关于它的这个存储数据的特点,哎,包括B端这块呢,大家做一个了解就行。拿过来我就原封不动就粘过来了,啊这呢作为一个了解。啊,看一看就可以了。好,那么刚才也提到了,我们集合的肯定是存储数据方面呢,更有优势,这个优势呢,主要体现在一方面涉及到这个数据的特点呢,比较丰富啊,你什么特点呢,我基本上都有对应的这样的一个实现类跟你去对应,这是其一,其二的话呢,毕竟我现在是一个类这样的特征了,所以呢里边呢就有丰富的方法可以直接呢拿过来去用了。
04:06
啊,即使这里边儿没有,我们后边还有一个工具类啊,总之的话呢,就是常见的一个操作呢,基本上都是可以满足你的需求的。啊,就这样个情况,所以这里边儿我们概述这块呢,就提到了整个这个框架的一个大体的一个结构啊,大家呢,做到这个心里有数,关于这个collection的话呢,它其实还有其他的一些子接口啊,只不过我们就不过多去关心了,平时开发当中,即使我们讲了set了啊,开发当中我们其实set用的也比较少,主要呢就是用list。然后呢,Map呢也是比较长的。诶包括呢,大家你平时这个用百度是吧,比如搜索的时候呢,写了个词条,这个呢一点这个搜索实际上呢,这个时候你看一下我们这个地址栏,它其实也是以这种建筑队特点的方式给我们这个发送到后台的。哎,查询的相关的这种词条啊。所以呢,像这种价值特点的数据呢,在我们生活当中也还是比较多的啊。这个呢,就是我们需要关心的第一个问题了,然后下一个的话呢,针对咱们这一章呢,咱们是从这样的一个呃角度呢来讲解的,这个大家呢,呃,整体上有这样的一个概念啊,我们这一章呢,主要是讲层次一和层次二,哎,包括我们下边讲这个具体的子接口呢,也是围绕着这样两个层次来说的,然后呢,层次三呢,我们是放到第14章当中来讲解啊。
05:17
那么在讲这两个子接口之前呢,因为collection呢是它的负接口了,所以这里边儿的方法呢,就比较通用,咱们呢就整体呢过了一下这个方法,这个方法的话呢,我们大体上呢,可以分成两波。诶,找到我们这个啊,这个第一步的话呢,哎,就是我们这个ter之前的这个方法。啊,这是一波,然后第二个的话呢,就单独的是这个T啊,这个主要是来体现这个便利操作的啊由他呢,我们引出了另外一个接口叫做迭代器接口。OK啊行,嗯,然后呢,我们把这个呢,诶看成是三角,就就整个先拿过来吧,CTRLC一下啊。诶整个呢,对于我们莱里边这个方法呢,大家呢也是啊,得有个整体的一个印象啊,大概有哪些相关的方法好由他呢出发,诶我们说呢,这块呢就引出了。
06:06
哎,叫迭代器啊接口。好,那下边我们就提到了,说这个迭代器呢,它是来做什么用的啊,这个我们在这儿呢,再分一个啊,比如这个3.1这呢就是诶常用这个方法。哎,在这,嗯,常用方法我在这写啊。诶3.2这个呢叫诶迭代器接口啊,这个迭代器这个接口呢,它呢其实也是一种设计模式。哎,设计模式的一种啊,这个呢,咱们大家就知道这个事儿就行了啊,然后呢,这个迭代器接口主要用来做什么呢。啊,这个大家要明确哈,首先呢,这个迭代器它是呢,不负责数据的存储。存储呢,你还用集合啊,他呢是负责对集合。啊,相关的这个类的一个便利啊,这呢是它的一个主要的功能啊。好,那具体呢,这个代码的实现的话呢,大家需要呢会去写。
07:00
相关的这个代码呢,咱们上课这也都说到了啊,找到这个迭代器,找到这儿这个呢是获取个对象,下边呢去调用啊,就是这个问题啊CTRLC。哎,拿过来这个呢,因为咱们都已经啊写了好多次了啊,这个大家呢,都应该比较熟啊,拿起来呢,要回去做啊。好,这呢就不多说了,然后还回过来这个常用方法这块的话呢,我们其中强调过,比如像contents啊,像这个remove啊,是吧,里边我们再去调用的时候呢,它需要调用啊元素所在类的E口的方法了,所以这块我们要重点强调一个问题,这个大家一定要关心。啊,就是这个事儿啊。那就这个啊,哎,然后呢,把它呢,我们先粘过来。一定要去重写这个E方法。那基于呢,我们后边讲的这个set的话呢,其实你把那个哈库呢,顺便呢,也给他重写一下就得了啊。哎,这是一个啊,然后另外的话呢,涉及到我们这个集合和数组之间的一个转换关系啊,这个转换关系呢,大家也要关注一下,以前呢,我们是数组,如果你想用集合,你可以把数组转化成集合。
08:03
哎,如果呢,你是集合在有一些方法的参数位置啊,它需要呢,换个数组,那你可以呢,再把它转化成十个数组,相互之间有个转换。哎,这个数组呢,放的是一个一个的元素,所以我们这块转的话呢,其实呢,转过来都是了。当然了,速度本身又有序,所以呢,它转呢,具体来说调这个方法,它其实返回的。啊,是不是一个list呀。对的啊,这个也不可能是set了,因为数组呢是有序的,那list也有序,所以它俩之间是对应关系。你也不用考虑呢,Map跟map没关系啊,Map是简直都是特点的。好,那这块呢就结束了啊,然后下边这块呢,关于这个list set,包括这个map接口,大家呢,也主要关心的就是两个层次,第一个层次就是你得知道呢,主要的实现类你看是谁,然后呢,你得会找对象,会调方法。啊,就这个思路啊,然后下边这个呢,就是不同的实现类之间的一个区别,就是大块呢,主要关心这两个问题。
09:00
好,那首先呢,关于这个list啊,List这块呢,我们这个呃,就分开来说吧,首先呢,涉及到这个叫层次一的问题。啊,那这里边儿就涉及到了它的这个主要实现类和常用方法。哎,那么关于这块这个常用方法的话呢,大家你得能够记住它啊,别这块呢,需要用例子呢,还得去翻一下我们的API,呃,常用这个方法呢,你要记不住,显得就有点low了啊。这块的话呢,我们总结出来呢,就是这样的一些方法。增删改差差长度变例。这个呢,拿起来就要能写。写成个Java吧。层好这呢,就相当于是我们这个层次一的这个角度了啊,层次二这个角度呢,就相当于说它在不同的实现类之间啊,有什么区别啊,那这块呢,我们诶课件里边呢也有提。啊,这个我们是写到这个后边的啊在这儿。CTRL一下。啊,这个呢,相当于是咱们这个层次二这个内容对应的list link list vector啊,它们之间是什么样的特点。
10:02
啊,那如果从一个呃,面试题或者叫笔试题的角度,我们去答这个问题的话呢,上面我这写的呢,只属于基本的内容。也就是说呢,你这样打别人呢,差不多也能这样打,还凸显不出来啊,你比别人呢,打得更好,那还加点什么内容呢?诶对,再要加内容的话呢,其实就是加相对应的这个源码了,源码的话呢,咱们在第14章当中去讲啊,讲完之后的话呢,你再补充到我们这个里边,相当于说完这个内容之后呢,呃,你说为什么这样的呢?呃,因为它底层使用这个双向链表啊,你说呢,我还看过相关的这个底层的源码,然后怎么怎么着展开呢,再说一说这个呢,就显得就更接地气了。也就是说呢,这个知识点不是你从网上找的,然后呢,别人这样说,你也这样说,是你自己呢,翻过源码验证过是吧。OK啊。好,这个呢,就是我们关于这个例子里边的主要的这个问题,就把这两个事儿呢,大家把握好就可以了。啊行啊哎,那么下边这块呢,是关于这个set set的话呢,大方向呢,也是这个样子,第一个呢是长方法,但是长方方这块呢,没啥可说的了,咱们说呢这个哎,Set中的这个方法。
11:10
哎,这个set中常用的这个方法。是不是都是咱们collection当中声明过的是吧?哎,声明的。方法啊,Ug呢,就是没有新增的这个方法。OK啊好,那么方法这块呢,就省事了,就咱们上面讲的这个collection的这样一些。啊就没了,那下边呢,就涉及到它的这个所谓的实现类之间的一个对比。哎,常见的。哎,实现类的一个对比啊。好,这块我们回过来,来找到我们的这个set。回过来,哎,这个我们是写到开头这块了啊好,这块我们把它呢CTRLC拿过来。哎,这个我们就放到这儿了。嗯,这个我们稍微调一下啊。诶行就放到这儿好,那么关于这个set里边呢,这样几个实现类呢,大家呢,就关注一下就行啊,因为呢,我们在开发中呢,Set用的比较少,从笔试面试的角度来讲呢,基本上也不问你。
12:10
啊,因为呢,他要问你这仨吧,这仨里边呢,其实都对应的叫哈希map,另一个的哈希map和map了。啊,所以这块如果要问,那你其实呢,就讲对应的map就可以了,Map是我们要讲的这个核心和重点啊,所以这块呢,关于他呢,大家呢,就熟悉熟悉啊就行了。啊,这呢是我们说的这个实现类,哎,但是在这里边儿呢,有一个难点的问题。这个难点问题呢,咱们在后边讲这个14章看源码的时候呢,还会再说,那就是我们这个set呢,叫无序的,诶是不可重复的,关于它的一个理解。哎,这个呢是我们的一个难点,所以呢,我们说呢,这个叫无序性不可重复性是吧?诶指的是什么意思。诶把这个呢,我们拿过来啊,然后呢,由这个无序性和不可重复性呢,我们就引出了一个点,有要求呢,我们添加到哈希set和link哈set当中,这个元素呢有要求,这个要求呢就是重写两个方法。
13:04
而且这两个方法呢,要求得一致性,那既然如此,咱们就自动生成了。啊,这个呢,是最后咱们落地呢,大家呢,需要关注的这个点是这儿啊。啊,就到这儿了,行,那至于说呢,后边这个关于叫吹ET的一个使用呢,诶大家呢,不用花太多的心思,哎,我就在这儿呢,简单的写一下吹ET呢,大家作为一个了解就行啊。诶了解,诶吹set它的一个使用,平时我们开发中用的呢,比较少,通过它呢,还是去熟悉两个比较器。较期呢,咱咱们在上一章已经说的是重点了,所以我就在这儿就不多说了啊好这就完事了,然后呢,这个map接口还是呢,按照我们刚才说这个思路啊,层次一事线类,哎,主要的事件类,然后呢常用的方法有哪些,咱们先来说这个。哎,常用的这个方法吧。OK啊呃,咱们讲课的时候呢,是后讲的方法啊,因为呢,我们在测试的时候呢,大家脑海当中最好呢,得先有这么一个图。
14:05
就是咱们讲的这个map里边的这个图。诶,所以呢,咱们是先讲了这个事儿了啊,但是现在咱们复习的啊,咱就可以先说这个方法了。方法这块的话呢,我们总结为呢,叫增删改查长度便利,诶那么这几个方法呢,大家得拿起来就得能写,说白了你得记住。其他的这些方法你记不住来A。好,这是我们说的这个常用方法,然后下边的话呢,就是对应的常用的实现类啊。实现类,哎这儿呢,就是我们这个层次一里边。诶不是层二里边啊,提到的具体这个实现类他们之间的一个情况,诶这呢,我们是写了这样的一些啊。这个呢,对应的这个面试题是吧,有这样的问题啊,CTRLC。诶,粘过来。啊,这个稍微的,我把它调一下啊。那就这么着了。
15:00
啊,这个呢,大家如果看着不方便的,你还是看咱们这个,诶写的这个T啊好,这个呢,就是具体的实现类里边呢,提到了有这样的一些,相对来说比较多一些啊嗯,从这个面试题的角度呢,大家去看这个内容呢就可以了。啊,这里边儿呢,其实比较重要的还是这个哈希map开发中用的比较多,然后它底层这个数据结构呢,也比较复杂。所以呢,在这个笔试面试当中,这个哈希map呢,绝对是一个极其高频的一个题目。啊,就是你在找工作之前的这个map呢,它的底层源码实现,然后呢,它是如何造对象添加数据的,添加数据你清楚了,它删除数据呢,跟添加的是一个逻辑啊,其实上也就涉及到底层哈希map哈,Code和E方法的调用,把这个事儿呢,一定要说清楚,这个咱们放到这个14章的时候呢,咱们再讲啊。这一章呢,咱们重点呢,就是大家你得会用啊,开发中呢,你得会调方法,会造对象,这个事儿呢,更重要一些啊。好,然后呢,我们接下来呢,又提了一提这个map里边这个存储数据的一个特点啊,就提到这个事儿了啊这块呢,大家也关注一下,因为它会影响到我们在使用这个哈map的时候啊,你相应的呢,这个key是吧,对应的类该重写得重写。
16:13
啊Y6啊Y6这块呢,你对应的这个是个collection了啊,虽然说不要求重写哈code吧,但是呢,咱们也不用记得那么细了啊,就都把这两个方法给他重写一下啊。好,这个呢是比较重要的,因为它会直接影响到我们开发的时候呢,你这个代码写的对不对是吧?哎,要重写啊。好,这呢是我们说的,呃,这样的一个问题。啊,然后呢,同样的关于咱们提到的啊,其实这块有两个了,一个呢是这个叫tree map啊,它的这个使用呢,是一个了解的内容。诶,OK啊,然后呢,我们还讲了一个叫做properties。哎,它的一个使用。这个使用的话呢,其实是一个终点。哎,我们写到这儿了啊,其实是一个重点,但是的话呢,由于这个代码目前呢,咱们诶涉及到了去读这个流了,咱们还没有讲这个流呢,等我们讲完这个流的操作以后呢,诶这呢,大家写起来就没有什么障碍了。
17:13
啊,或者换句话说呢,咱们大家你就先看一下这个事儿,那我们后边呢讲到啊,比如外部这个内容的时候,我们需要呢,写相关的配置文件了,到时候我们在用它的时候呢,到那个时候你再把它掌握一下也没问题啊,因为就几行代码而已哈。这块的话就是我们关于这个叫map,它的一个整体的使用,所以这呢,其实算是一个呃,需要大家掌握的一个内容了啊。哎,OK啊,这块我就先写成一个叫中药了。诶这样就行好,诶那么整体来讲呢,关于map呢,其实也就这样啊,然后后边这块有个叫collections工具类的一个使用这个呢,大家你就从一个诶面上系的角度,你首先得知道呢,哎,它是什么是吧?诶我们在这写的啊。能够区分一下collection和collections,这是一个最基本的了,然后下边呢,就是常用的方法啊,大家呢,熟悉一下就行了,后边你需要用的话呢,你直接来找我们这API文档就行啊,就熟悉一下。
18:12
哎,常用的。诶,Collection。四是吧,哎中的这个方法即可。OK啊行这呢,咱们关于啊这章的这个复习呢,就这样可以了,下边咱们看看这个常见的这个题目呢,你看都有哪些哈,诶咱们走一下,哎,这三个呢,是否继承于开接口。那不是是吧。哎,对,这俩是这个我就简起了,咱们都很清楚啊,说说说呢,它们三者的一个区别。啊,这个呢,你就简单来说的话呢,就是我们这里边儿写的这个事儿。哎,这不就比较简单嘛,是吧,所以这块我就写了一个叫略了啊。这个呢,就不用展开太多,这要展开多的话,这这可有的说了,是每个时间内再说一说,那就没头了,所以呢,就把我刚才说的那每一个概述里边的写的那个写一下说一下就行。
19:06
让他写出list map set接口的实现类,并说出其特点。这是华为吗?这我不知道是不是华为哈。啊,华夏优惠啊,嗯嗯,这个的话呢,你就当然这个也看公司是吧,就看着这公司呢,是对的,就是小公司的话呢,你就简单说这个,你一看是这个大厂呢,你就说点高大上的这是吧。要不的话呢,怎么显出它比较高大上的是吧。诶说说他这个时间类,那你要是一个普通公司的话呢,你就把我们上面写的那个点说一下就行,你要说的,诶要是这个大厂阿里呀,是吧。哎,华为啊,这样的公司呢,你最好还得再说一下源码啊。是吧,诶通过源码咱们证明出来这个,比如说list里边的俄release和link list啊,为啥呢,你这个增删快,那个增删慢呢,是吧,这个都是由底层的数据结构决定的啊,你再说一下这个底层的数据结构的事儿啊。
20:01
这个咱们就略了,里边呢,有一部分这个源码的问题呢,咱们放到14章里边,我们讲啊说常见的集合类的区别和适用场景。啊,像这个咱们其实都已经讲过了,都是吧,这个试用场景的话呢,这个我上课的时候呢,就举了一个这样的例子啊,就是咱们在使用这个,呃,集合的时候这样的一个场景,实际上这种场景呢,我们并不少见。基本上的话呢,我们看到都是这种列表的这种方式啊,诶滑动这个数据,诶其实这里边儿整体来看的话呢,就是一个list。呃,然后具体这里边儿呢,你可以封装成个对象也可以呢,用具体个map呢去装这个数据,包括呢,我刚才说的,咱们做这个搜索的时候呢,大家你点一个搜索这个词条的话呢,其实也是以这种简直的特点的发送到后台的,包括在这块你想注册一个呃页面是吧?诶用户名啊,这个密码啊,你的地址啊,诶像这些用户的信息呢,你一点啊发送。一个请求的话呢,发给后台,实际上呢,也都是简直的特点的。因为你这是一项,这是一项,这一项的话呢,这个K呢,可能就叫做name,那我后台呢,我就可以呢,Get你这个name。
21:04
我就拿到你这个对应的value了。哎,像这都是属于建制队特点的这个数据啊,比较多啊,相对应来讲呢,我们这个site呢,其实是比较少见的啊。Set的话呢,就是来过滤这个重复数据的啊,我们会用一下这个set,或者换句话说呢,Map呢,我们比较常用,我们只看它的key的话呢,这就是set。啊,也就是我们讲的那个啊。好,所以这块呢,我们就诶暂且就略了,后边我们在开发当中呢,还会有一些场景诶,大家能够见得到的,你稍微的总结总结啊,这个问题呢,你到时候会更好答啊。说集合的父类是谁,哪些安全的?你看这个题目还挺阴险的啊。咱们讲集合这块的时候呢,其实根本没有提过负类的事儿。所以你千万不要说呢,List或者collection或者map,这都是接口。是吧,咱们没有讲这个类的这个层次关系,比如说像我们这个呢,叫a list是吧,这呢我们来一个CTRLH。
22:02
负类呢叫abstract list,它的负类呢叫abstract collection,然后是object,像这个呢,咱们根本都没有过啊。所以这块的话呢,呃,你也不用太过多去关心这一章呢啊,从上往下延伸,咱们是从接口的角度往下延伸的啊。哎,所以他要是真正负累了。那你就说一下刚才提到这个负类呗,是吧。啊,那现在的这个set也好啊,这个map也好啊,你再看一下就行啊,这个我就略了,然后这个限制安全性的话呢,咱们重点的都讲过了啊,像这个不安全的还都是比较常用的是吧。A release呀。哎哈希map呀,哎哈希赛呀,最常用的就是他仨还都不安全啊,然后安全的呢都不用。啊,这个vector。是吧,然后呢叫哈希table是吧,诶这呢都是安全的,但不用。哎,那遇到安全问题怎么办呢?
23:00
Collections里边有个的叉叉叉的方法是吧,那你就把它们包一下就行了,那问你诶它包的实现的逻辑的原理是什么呀。对,就是在你这个相关的对象去调爱的,呃,类似的这种方法的时候呢,我就给你加个信用奈子包一下就行是吧,哎,非常的简单直接啊。因为呢,你这里边方法都写死了,我也没办法再给你加使用,我只能是把这个方法包一下。好,下边说集合说一下哪些是线程不安全的,跟这个类似是吧?给略了啊。说这个便利集合的方式有哪些?啊对,这个呢,就是主要呢,就是我们使用迭代器了,但是这块你注意啊,这个迭代器呢,咱们就要它是用来便利。准确的来讲是来便利collection的。哎,也就是说呢,不能用来遍历map啊。因为我们便利map的时候,不也用它的迭代器了吗?
24:00
对,那是你单独看K,单独看value,看key value构成的NT的时候,其实都是一个一个元素了,我们才用的是吧,所以map本身呢,你要从值的角度来讲,咱们不是用它啊。哎,这要小心一点啊。然后呢,再一个就是哎,增强。For循环或者叫for意识循环是吧,这两种方式呢,诶都可以考虑啊,这个map这块呢,我们便利呢,你就单独考虑key value6或者k value6构成的entry,其实都是set啊,Set或者再去便利它就行啊。然后呢,诶这块有个小细节呢,就是一般的这个for呢,哎这呢,我们说呢是。可以。哎,用来便利谁呀?List是吧?OK啊,行。啊,这就过了,然后下边啊,List下边有哪些实现啊,就拒绝实现类了啊这个咱们上面已经说过了,就略了。说release和link list区别,你看好多的都在问是吧?
25:01
啊,这个呢,咱们不是也讲过了啊,上面呢,咱们就讲这个实验类的区别了,然后呢,你要想说的稍微的高大上一点。啊滴滴呀啥的是吧,像这个的话呢,你就得要说一下这个源码了,阿里下招校招啊京东是吧。这块呢,我们就也略了啊,这个呢,建议呢,如果像这种稍微的大厂的这种场景呢,这个要再补充上。诶,我们第14章呃中的这个呃源码是吧,主要这个源码我们讲的话呢,大家关心的其实就是诶底层的这个呃数据结构问题啊。就是校招的时候呢,通常他会问一些比如说这个理论性的一些东西啊,那如果说是这种社招的话,像咱们大家找工作基本上都是偏向于社招了啊,社招的时候呢,更多的就看中你实际开发的这种经验了。啊,那么这时候的话呢,我们更多的还是要说一些实际开发中的这种场景。啊,就是有利有弊啊,他看中你这个开发的经验呢,那对应的话呢,像一些呃,校招里边会考察的一些这种算法问题啊,数据结构这种问题啊,他可能就会比较少的出现了,但是呢,又想问一问怎么办呢?那我只能是接点机器问了,集合开发肯定要用了,那我就借着集合来问你数据结构。
26:14
啊,那我们也不藏着掖着,那我跟你说一说是吧。OK啊。好,下边它俩有什么区别?为什么要用它替代它?区别说过,为什么替代呢?啊,替代你可不能说因为VE限制安全,所以我替代了是吧。嗯,对,主要原因还是因为它这个效率要低一些是吧。OK啊嗯,就是很多场景呢,我们不涉及到安全性问题啊,咱们还是用a release。就好比呢,我们用string builder。啊,也可以考虑替换string buffer是吧?类似的这个场景。下边呢,有哪些常用的方法?啊,这个也问了,就是增删改查差长度变力是吧。哎,对了啊,说release是有序的还是无序的。有趣的。
27:01
啊,怎么证明?啊,你我看底层源码了,他用的是数组,数组就是有趣的是吧。啊,底层使用数组啊,而且这个数组呢,是一个注意object类型的数组啊。所以呢,你填什么元素都可以。Sat s哪些时间类,分别有什么特点?哎这个咱们讲,哎上面的时候呢,已经提到过了啊,哎这就略了。啊,利特集合和赛集合的区别。对,我们这也是基本问题了,有序的可重复的,无序的不能重复的啊,这是最直接的区别。哎,共同点呢,就是有一个共同的负接口啊。说S里的元素是不能重复的,那么用什么方法来区分重复与否?用等等还是用equals。肯定是ecos了是吧?呃,这俩有什么区别,这个题目其实就飘出去了,成分它俩有什么区别了,这是另外一道题了啊呃,另外的话呢,就是我们这个里边比的话,也不单纯使用的是它是吧。哎,或者换句话说,你看这个它是如何检查重复的,这个呢,得是两个方法了。
28:05
这个方法诶和。哎,ES是吧。当然这个方法呢,具体怎么去使用呢,咱们其实没有展开来说,这个展开的话呢,其实就得是讲哈希map的底层源码啊,第14章见啊。下一个数map的两种排序方式在什么时候?呃?在使用的时候呢,怎么起作用。他们起作用。就是咋用的是吧。啊,这句话呢,就是我们在添加元素,其实这块呢,呃,也相当于啊这个那还是基于它了哈,为什么基于它呢?因为它是个红黑素是吧。它是一个排序二叉树。啊,它就是这样的一个方式,诶,当然脑海当中你就浮现这样的场景就行了哈,然后呢,我们现在新来这个元素的时候呢,新来的这个元素,这个元素你是自然排序啊,定制排序啊,无外乎呢,就是要么调compare to,要么调compare,呃,Compare是吧,俩方法啊,然后呢,比如说调compare to的话呢,拿着它去调compare to,把你这个元素比如放进去看看谁大谁小。
29:05
啊,然后我这个大我就取右边。这边的话呢,还有再比。笔代笔代笔。这样的一个思路下去就行。什么时候起作用呢?其实就是在添加的时候。诶,我们要调用啊。在添加。哎,这个。哎,新的元素石,哎,我们呢,需要去调用。哎,就是对应的两个方法啊,要么是compare to,诶或者呢是调这个,诶compare这个方法。诶,根据它返回这个值的大小,我们看一下到底是在这个数的这个右边呢,还是在它的左边呢,去分配啊。好,它的数据结构啊,这个就是A红黑树是吧。好,Map首页map中有哪些具体的map,那这个咱们都已经说过了啊。哎,说final呢,怎么用修饰,看这块啊,修饰map可以就是我们用final来修饰map了,那么可以继续添加数据吗?
30:06
我用final修饰一个具体的map的对象。我还能不能往里边再put数据?想想。Final,这有一个叫哈希map是吧?修饰的一个哎哈希map,然后呢,我通过这个map呢,去往里边去put。对,为啥不可以呢?Final修饰表示带的地址不能变是吧?没说不能够写入数据吧?对吧,所以是可以的哈,那怎么就不可以添加数据了呢。把它变成一个只读的是吧。啊,Unmotifiable是吧,把它变成只读的话呢,就不能往里添加了啊。行,它是两个概念啊,说它俩的一个比较。诶,这个题其实我觉得就有点儿水平是吧,至少呢,问出来点不一样东西了哈,这个赛的话跟map的比较,诶怎么把他俩还扔一起去了呢?其实呢,就像让你说一下他们底层有什么关联是吧。
31:08
哎,这个我们也稍微提了一下,这个哈希set,它的这个底层就是。哈希map是吧,Link的哈希。它的这个底层就是。Link的哈希map。啊,然后呢,吹set的底层。诶,就是我们的这个,呃,叫tree map是吧,这呢就是他们底层的关系,所以呢,在笔试面试当中,没有人会去问他们的一个底层诶。啊对啊,没有人会去问他们的底层源码视线,因为呢,诶咱们就直接问后边了。啊,真的要有人问你了,你就直接说呢,它的底层就是他,我们就直接还讲后边的就行。Map说一下现在安全码。安全吗?不安全是吧,你说我们看这个方法呢,发现他都没有用这个,呃,C空寨来修饰,那怎么就安全了呢。
32:04
哎,S里边呢,给它调那个S的包一下是吧。它俩的区别啊。咱们讲过了啊,对了。High table是怎么实现的?为什么显示安全?哎,这个实现呢,就是速度加。单向链表。啊,其实以前的话呢,我们说这个哈希面呢也这样,但是呢,呃,人家在JD8的时候呢,又多了一个宏位数,它呢因为也不用了,所以都懒得给他改了,所以呢,它就是它为什么限场安全。底层方法呢,使用。袋子来修饰的。哎,所以呢,是现场安全啊。下边区别啊,这是诶哦,它俩的区别啊,这个咱们也讲过了啊。就是在现有的它的底层结构的基础上加了一对双向链表是吧。啊,由此引发出来的就是便利的时候呢,是你添加的顺序频繁的便利呢,因为它效率也高是吧,这样啊,它俩的区别。这两个的话呢,其实问的按说不应该太多啊,因为他俩呢没什么相关性。
33:02
就是底层的数据结构呢,截然不同是吧。哎,那就各说各就可以了啊,Ma里边实际装的是什么。对,实际装的话呢,呃,对于哈希map来讲,这个呢,就涉及到咱们在JPK7的时候呢,这个哈希map呢,诶它呢底层啊,就是这个内部啊声明了其实呢。哎,这个呢,它叫N的一个内部类啊。哎,那么在JDK8的时候。对,咱们呢,上课的时候呢,我也带大家呢,看了一下这个源码啊,他这个map呢,它内部呢,要声明了叫node。然后呢,不管是node也好,还是那一个class呢,叫entry也好,它呢都实现了,咱们叫map中的叫entry接口啊。就是名呢,变了一下。啊,那这个N接口啊,这个呢,是定义了我们内部存储数据的一个标准了,然后是N也好,神重的也好,这个我们说呢,Map里的叫K,实际上K作为我们的note的两个属性是吧。
34:10
Y6作为。哎,Node的两个。呃,属性啊出现啊,那上面呢,就是作为我们这个N的两个属性出现。哎,这个N垂呢,指的就是我们这个N垂了啊。所以说咱们这个map里边呢,你也可以说呢,装的是一个一个的数据,是一个一个的node,或者叫一个一个的entry啊这样。好,Map中的这个K呢存在哪儿?和Y6呢存在一起吗?哎,Y6存在哪儿,具体说一下。嗯,这就存在我们的这个数组或者链表这个结构里边是吧。数组加链表,哎,或者呢,是这个红黑数。哎,这个结构里边,但是这个结构你注意呢,咱们其实都呈现出来的是node了。或者叫ENT啊,那具体要在哪,你只能说呢,是在我们这个这个某一个数组的某个位置上的node的里边的一个属性上是吧。
35:04
哎,得这样去说了啊。哎,作为哎node的这个。属性出现,哎,不光是我们这个K,哎Y6呢也如此。OK啊行,然后呢,自定义的类型可以作为K吗?可以不?可以啊,但是注意呢,要重写。哎,哈希。厚的。和E的方法是吧。哎,这个注意一下啊。然后下这个叫啊说集合类的工具类是。哎,然后呢,用过工具类的哪些方法,这个呢,你就根据自己情况呢,你自己说一下就行啊,略了它俩的区别是不是已经说过了略了,哎这个a list如何实现排序。这个你可以直接调我们这里边儿这个。扫的方法是吧。
36:02
哎,直接调的扫的方法,你把这个例子呢,往这一放,诶它就排好序了就行啊,然后你要是指定的是想从大到小啊,或者想给一个标准呢,这个呢,你可以后边呢再使用。对,咱们不是还有一个重载的方法吗,是吧。逗号一下来一个吧。诶这么着啊,刚才它是否线程安全,怎么解决它的线程不安全,这个咱们上面也都提到过了啊,诶这就略了行,整个呢,大家你会发现呢,我们关于这个集合这块呢,考察的问题啊,其实是挺多的哈,这呢在我们实际呃,笔试面试当中,确实这也是一块儿重灾区啊,很多同学呢,这块呢整的不太明白,稍微呢再捋一捋啊。好,所以我们先到这儿。
我来说两句