00:00
OK,那么把这个集合呢,为什么要使用它,以及它的具体一些场景我们就提到了,那接下来呢,我们就得关注到底这个集合呢,都有哪些东西,诶我们就落实到具体的这个API层面了,说这个Java集合呀,首先呢,可以分成两个体系,第一个呢叫做collection体系,第二个呢叫做map体系。这两个体系啊,两个结构,它呢不是类,而是接口,那接口呢,哎,我们一想到接口说它定了一种规范啊,那什么存这个用collection去存储数据的话,哎,它的特点呢,就是存的都是一个一个的数据,哎我们把它叫做单列数据啊,存储一个一个的数据,就好比是一个一个的对象一样啊,是单列的数据,那么map。这个map啊,翻译过来呢,不能叫地图了啊,啊,它叫映射啊,这叫映射,映射就会涉及到啊,你拿谁映射谁。这呢就会涉及到俩数据,咱们习惯上把前面这个数据呢叫做key,后边这个呢叫做value。
01:06
就是K呢,映射一个value,它呢是这种,你有好多个可映射value是吧?啊,再有一个可以映射个value,这不涉及到叫双列嘛,哎,所以呢,Map呢,存储的我们通常也可以叫做一对一对的数据,就里边有两个啊,一个K对应着一个value,哎,这是它,嗯,那么collection的话呢,这是一个接口,它这个接口下边呢,没有直接提供它的实现类,呃,Map呢,提供了map下边呢,直接就提供了一些具体的实现类了啊那么我们这个collection没有collection的话呢,呃,在实际操作层面发现呢,还得再去细分。分成了叫做list和set,哎,当然呢,也不只是两个,我们把这个,诶collection CL c放到咱们这个API层面呢,你去搜一下。哎,这是我们这个接口,你看它这个,所以我们知道的这个叫sub啊,Interface,它的这个the接口子,接口里边,你看我们提到一个叫set,一个呢叫做list,那还有其他的。
02:11
其实挺多的啊,就是存储一个一个数据方面呢,还有具体很多的细分情况,那么咱们这里呢,主要关注的呢,就是其中的两个了,哎,一个呢叫做list,叫存储的叫有序的可以重复的集合,诶有序的可以重复的集合,那么set存储的叫无序的不可重复的集合,它俩正好呢互相对应啊,你有序我无序,你重复我不重复。啊,这呢,就是咱们提到这个算式叫集合框架。啊,集合框架下边呢,这会儿啊,还罗列出来了具体的这个细节了啊collection它下面有list,有set,再往下这个实线呢表示的,因为这个list跟set是接口了啊呃,实线呢都是继承关系,虚线呢是这种实线关系,那很显然这就是个类了啊类呢实现这个啊接口啊那这呢,关于set呢,你看这提到了几个实现类啊,那么这个类似的话呢,也有具体的几个实现类。
03:15
啊,那涉及到这个便利的话呢,有这个eator,涉及到对象对比比大小,咱们昨天已经讲过了,哎这样两个接口,那么map是跟我们collection的并列的啊,这个一个结构,它呢下边呢,直接提供的实现类啊提到了哈西map link的哈奇map tree map,哈奇table和properties,哎这样的两个两套这个结构,哎,我们会看到有很多的API。啊,这也是这章呢,呃,区别于我们前面像讲多线程啊,多线程涉及到一篇呢非常少啊,啊这里边呢又涉及到很多啊,因为呢,在存储数据方面呢,数据的特点不一样,那我们呢就要选用不同的结构,就像呢,你喝水你得用杯子啊,这个装电脑你得用书包啊,你装你自己你得用衣服是吧?啊你不能这个喝水啊,还是干啥你都用书包,那不行是吧?哎,你这什么容器得干什么事啊,所以我们这里会涉及到很多的具体容器,行,那么需要大家掌握的就是这里边提到这个架构啊,咱们这块呢,一块儿呢写一下啊,一边写呢,大家一边呢去记忆啊叫集合框架,嗯,首先呢,我们提到两个比较大的这个结构。
04:33
哎,Collection这个接口,诶,和它并列的叫做map接口,成这是两个接口了,然后在这个collection这个接口下面提到了它的两个子接口啊,一个呢叫做list接口。啊,一个呢叫做set接口,那map呢,就没有再去提供子接口了,那么刚才也提到了,说这个collection接口它的特点啊,我们通常呢,把它称作叫做单列集合,说用来存储啊,一个一个的,哎,对象它存在都是对象了。
05:16
啊,存在都是对象,有同学可能会想,诶,那存一个一个的int double布尔咋办呀?你是不是还有包装类了,哎,以包装类的方式呢去存啊,哎,这是它,然后这个map的话呢,它呢叫双列集合,用来存储一对一对的数据。那么这里边提到这个一对一对的,这个对的话呢,就是涉及到俩,哎,就是一个K哎,一个value,这咱们说一对就是俩是吧?啊,你说街上看到一对一对的情侣,你不能看着仨人在那抱一起呢是吧?啊,一对就是俩啊啊所以就是一个key啊和一个value啊,这叫键值,对啊,行,这是我们说的map,那么又具体的话呢,Collection下边两个子接口啊,叫做list和set list存储数据的特点,还记得不存储叫有序的诶可重复的数据,嗯,那它呢,Set,诶,无序的,呃,这个存储无序的不可重复的数据。
06:35
哎,这是这样子的行,那么呃,先写成这样子啊,这里边儿的话呢,像这个list存储有序的,可重复的一看,诶。是不是跟数组有点像啊,咱们说呢,呃,数组呢不好,有缺点,那我们用集合去替换,那集合呢好多了啊,准确的来讲,我们想去替换数组的,准确的说呢是list啊,那list呢,我们说叫有限的长度不可修改了,那它呢,貌似呢好像说就可以修改似的,所以我们习惯上把这个list呢称作叫动态数组。
07:14
呃,习惯上把它称作叫做动态数组,就是相较于我们数组本身,嗯,就像是静态一样啊,定义好以后长度不能改,确定了定死了叫静态的,这儿呢,嗯,先存是吧,你不够了,不够还可以给你扩啊,这呢就所谓的叫动态言IG呢,咱们讲的这个练习回头呢,咱们讲完力色以后,大家呢,就可以不用这个数组存了,就用我们这个list的实线类,这里边呢,你有几个最大相同字段,你就只管往里装就完了,不用考虑长度超不超的问题。啊,就这个事儿。成这个呢叫动态数组,我们这个set呢,这个的话呢,叫做什么呢?无序的,不可重复的。这种啊,其实有点像咱们啊,不是大家上大学了,也不是咱们讲的前面Java基础了,是像大家上高中的时候,嗯,你们有没有学过一个张结交的集合呀,是吧?嗯,如果没记错的话,或者不知道这个各个省份一样不一样啊,嗯,在河北省,我那时候学的时候呢,这个高中的第一章就叫做集合说呢,就画一个圈。
08:27
是吧,画一个圈呢,然后呃,比如说啊,咱们班的同学啊,我就拿个圈一画,说大家呢,就是一个集合,对,这就是一种这个集合的关系,这个集合呢啊,就是高中讲的这个集合,跟咱们这里边的这个集合不一样,这个集合呢,是范围更大的一个集合了,啊,就是看成是一种容器这个层面的一种集合了,那我们这里边儿具体的有个叫set,这个set接口无序的,不可重复的,它呢其实类似于我们诶高中讲的这个集合。
09:04
哎,这个有点像高中讲的这个集合了,高中讲那个集合讲过几个特性,是不是还记得啊,一个呢叫性。无序性。确定性,哎还有记得呢,还有什么呀,还有个叫互益性,这个我讲过是吧,所以呢,我就记得了啊,哎无序性这不就跟我们这个无序性这不一样吗?哎,确定性就是说呢,你这个拿个元素在不在这个集合里边呢,是确定的,那你这显然在set里边,我们判断里边有没有,那也是确定的啊呼吸性。不可说彼此不一样,那不就是不可重复嘛,哎,所以高中讲的那个集合呢,高中那集合呢,它也是对我们现实生活中的一些刻画啊,咱们这个代码其实也是一种刻画了,那这个数学当中讲的那个集合呢,在咱们集合当中同样会有应用场景,那我们这就用这个set接口来刻画呢,就像高中同样的这个集合的问题,比如说我们通常用这个set呢,去做一些过滤的问题。
10:12
嗯,就是我这呢有好多的数据,这些数据里边有些是重复数据,好我呢把你往这个set里边去放,谁先放谁后放无所谓,但是你这块比如放来放进来一个数据,然后我再放这个数据呢,发现跟你这个一样了,我就不要了,相当于就可以把这个数据呢过滤掉,哎,这就我们可以用这个set来做啊,那再接下来呢,这个map,那map呢,就要存储一对一对的数据,一对一对的数据,以前有没有见过类似的。对,这个呢,是不是就提到这个高中大家学的这个函数了,对吧?哎,高中这个函数呢,呃,对很多同学来讲呢,就非常的痛苦啊,就像噩梦一般是吧?哎,其实不管高中讲了,初中就讲。有的可能小学是不是就开始接触了。
11:01
啊函数,我们习惯上把这个函数的习惯表示成这样的一种方式了。嗯,说Y呢,等于FX啊,这个X相当于咱们这里边谁啊,对,相当于就是K啊,这个Y呢,就相当于是VALUE6了,我们让每一个自变量对应一个响应变量啊,这个函数的话呢,咱们不也会画成一个图嘛,讲函数之前通常呢,都会先讲一些叫映射是吧?说这个呢,就是你自变量的一个集合,真的就是你这个叫什么因变量的一个集合,哎,然后自变量呢,通过通过某种所谓的叫对应法则啊,一个X对应一个Y x1Y1是吧?啊,然后X2呢,Y2啊类似这样的,左边呢,就相当于咱们这个K,右边呢就相当于咱们的value啊,它们两个确实是吻合的啊。再往下讲的话呢,又得提到说这个K和value的特性了,在函数里边呢,这个X呢,哎,我们可以有很多不同的X,那么函数里边说不同的X可以指向同一个Y嘛?
12:06
可以,比如说你有一个叫Y等于X方是吧,那X如果是正一负一,Y是不是都是一呀,相当于呢,就是不同的X可以指向同一个Y,咱们这个map当中也这样。那就相当于两个不同的K呢,你可以指向一个相同的value。啊,可以指向相同的Y6啊,那反过来函数里边呢,你能比如这个,呃,这个X是一啊,有没有一种函数这个一,然后找Y的时候呢,发现有两个不同的Y值,不会的是吧?就是在函数里边呢,你可以多对一,你不能是不是一对多呀,这种是错误的,那么在我们map当中也这样啊,就是你不可能说呃这个一个key啊对应着两个不同的维流说张三考了多少分呢?考了这个,哎54分没及格是吧?呃,李四呢,李四也考了54分,哎,恰好呢,他俩就是呃对应的是一个了啊你现在来说张三考了多少分,张三考了六十四五十四分啊,也考了64分。
13:10
这逻辑上都不同是吧,就是一个K呢,不可能对应多个Y6,但是呢,哎,不同的K可以对应同一个VALUE6啊,也就是说呢,我们这里边这个map呢,跟咱们讲的这个函数呢,确实完全是吻合的函数呢,可以刻画很多生活中的问题,那么map呢,也可以刻画我们编程当中的编程,其实也刻画生活的问题的哈,他们是对应的。那这样要说完以后呢,基本上我们这个集合差不多也就讲完了,就是吧,都讲过,你看是吧啊都学过哈啊当然呢,开一个玩笑啊,咱们还没有正式开始讲啊哎,正式要开始讲的话呢,涉及到这个list下边呢,咱们看到刚才这个框架呢,又涉及到它的一些实现类了啊这里边实现类呢,我们就先暂时泛泛的写一写啊,涉及到叫a list。
14:01
Link list vector,这是它的三个主要的这个实现类,那么对于我们的这个set来讲,我们会涉及到叫哈希set link,哈希set啊,还有呢,我们叫啊吹S。啊,这是我们这样的三个结构,好,那么关于这个map,它提供了直接的实现类啊有哈希map,哎,另个的哈希map。嗯,还有呢,这个叫tree map,嗯,还有呢,叫呃哈西table,嗯,还有呢叫proper。这个呢,都会讲到啊啊有点多是吧?哎,这里边呢,有的是主要实现类,有的呢就不是那么主要了啊,你就听一听啊,就是呃,肯定会有一些这个轻重的一些概念的啊成这呢,就是咱们提到的哎这样的一些集合框架,涉及到一些接口的特点,一些具体的实现类,这个大家呢,先把这个框你得记住啊,具体的这个实现类的话呢,他们的区别是什么,咱们接下来呢,你再展开去说,就是我们这一章呢,主体的其实都在讲这些具体的实现类了,看看他们的特点是什么,方法有哪些是吧?哎,那么除此之外呢,咱们讲的再稍微深入一些,带着大家呢看一看源码,尤其呢,在这个呃面试当中啊,这个面试当中,咱们有时候经翅提这个面试的事儿哈,就是面试中问的这些问题呢,就肯定他是比较重要的问题,比较敏感的问题,能够考察你技术水平的问题啊,在集合这一块的话呢,通常爱考察的就是关于a list link list veor。
15:51
他们在这个这个首先呢,先泛泛的介绍一下他们有什么不同,然后的话呢,你来谈一谈他们在底层啊扩容方面是什么样子的啊,这是这样一个面试体,还有一个呢,面试体就是哈table,呃哈奇map极其高频啊哈map的底层实验原理是什么,那这块呢,又会涉及到一个在JDK7和JDK8当中呢,还不一样。
16:16
啊,那那又得都提一提是吧,哎,那这个问题的话呢,就是我们以前讲过的啊,说呢你会我也会的问题,看谁掌握的深啊,一旦好的公司喜欢要这样的人,那么哈map呢,你用你会用我也会用啊,你不懂源码不会懂源码啊,那我呢就比你要强一点啊,所以呢,咱们呢,也要讲一讲这个源码是什么样子的啊嗯,成这呢,就是我们提到这样的一个框架结构啊。
我来说两句