00:00
同学们,那么我们开始今天新的内容,那么今天新的内容呢,我们讲数据结构,各位啊,准确的讲,我们讲的呢,就说虽然我这取的叫数据结构呢,但是准确的讲,我们讲的就是集合,其实集合呢,里面就包含了数据结构的概念,你比如说集合里面要队列。它就是一种数据结构。比如说有站。对吧,它也是一种数据结构,那么包括集合本身也是这个数据结构,那么数据结构呃,我这讲的更多的层面没有讲数据结构的底层,我们更多讲的是数据结构的一个应用,那怎么办呢?有些同学说老师那数据结构你这有没有底层一点的,就是怎么去实现这种数据结构东西也有,那么后面呢,我给他推荐,就是我这有些资料呢,到时先推荐一下,你比如说同学们将来呢,想去看一下这个内容,诶简单大家看一下。
01:01
二。不是字儿。啊,好像就是这儿。你比如说有些同学想对数据结构的它的怎么做出来的,比如像哈希散列,大家可以看一下这二叉树,包括递归对吧,还有像有些同学想去了解一下像这个站。啊,占队列排序这些呢,大家可以参照这种视频简单看一看啊,所以说我这说的我们更多讲的是它的一个应用。应用。好,那么这是我们开场的一个话题,现在呢,我们来开始今天这个具体讲解,好,我们新新开一个章节,我们新开一个章节往下拉叫数据结构的第一部分叫什么呢?走一个啊,好,我给大家来一个。这个分页。好,数据结构上,数据结构上。
02:03
那么这里面这个上呢,我们重点讲的是集合的,集合本身就是讲集合本身,我们下下一个章节呢,讲的是集合的使用。好的,我先来给大家一个小的标题。好,往这边挪一下。好,我这边挪一下,这样大家看的比较清晰。好,我们来往下走哈,第一个我们来看一下内容啊,上集合,集合来看,那数据结构呢,我们先对数据结构这个SC数据结构呢,做一个整体的介绍啊,我说了我这讲的数据结构主要是结合,而且还是站在应用层面,没有讲底层实现,讲底层实现内容就多了,那同学们将来这个不管是你有时间还是没有时间,我是强烈建议大家将来把这个数据结构好好看一看,哪怕你这个比如说暑寒假,不是这个到寒假大家可能也还没有开始找工作吧,你们应该是在年前结课还是在年后结课呀。
03:07
年前年前那个时候刚好你们比较尴尬,那个时候应该是人家也过了这个招聘的高峰吧,好像是不是马上快春节了。是吧,就马上要春节,那个时候一般来讲公司就不愿意招人了,为什么呢?把你招进去,你刚刚招进去过了一周就要放春节了,让你玩带薪的给你玩两周,你是是心里面谁也不舒服是吧,一般也是即使谈好了也是让你年后来入职,一般是这样子,你要有时候那个你过年的时候还要发点奖金什么的,你去了啥活没干是吧?给你发个1万块钱,那那那也太太爽了,所以说呢,这个你过年的时候,大家可以拿点时间把这个结果你们做大数据,你们做大数据的啊,对你们这个底层要求还是比较高的,所以说数据结构我是强力强烈建议大家看你们,你们这个整体的要求比Java e程序员要高,明白吗?Java程序程序员更多的是应用,你们应该是对算法要求更高,可能是仅次于像我们那个区块链的程序员,区块链程序员对这个算法要求更高了,就是全是算法。
04:13
你看动不动就谈各种算法嘛,对吧,但是你们呢,要去看一下,所以说春节的时候建议大家找本书,找本什么书呢?你们别别看别的了,你们到时间我推荐几本书,就是什么呢?就有一本书叫那个Java数据结构大话,大话数据结构那讲的还比较通俗易懂,比较实用,把那本书整懂就行了啊OK,那题外话啊,我们看一下,呃,SC集合呢里面首先第一句话开篇名义在SKY里面呢,看跟Java不一样,它首先它支持不可变集合和可变集合两大类。怎么个意思呢,就说嗯,就说在这个刊里面呢,各个集合,各种集合在几乎啊,几乎所有的集合类都提供了两两大块儿,一个是不可变,一个是可变,那为什么设计者就是马丁奥德斯基,他要去设计两大类呢?
05:11
为什么要设计同样一种集合,它要搞一个不可变,还要搞个可变呢?其根本原因是这样子的,因为不可变集合呢,它直接就是这个并发安全的,所以说他认为你因为你这个地方不可变呢,言外之意说不可变指的什么呢?就是我们这个集合不能动态的变化,比如说增长、删除,一般不让你动。那只有读和读独自操作嘛,那这样子的话呢,我这个对线程安全在底层实现呢,就会相对简单一些,相对简单一些,那么它的这个效率就比较高,那换言之就是说如果我们能够用不可变集合,我们应当优先选择不可变,再说一遍说在你这个业务逻辑上来看,你本身就没有对这个集合的动态变化的东西,那么我们优先应该选择不可变集合,对你的效率会比较高。
06:05
那么还有一种集合呢,就是毕竟我们集合还有部分集合就是要变化,比如说我们一个数组。我们这个数组呢,我们就是希望它动态的增长,比如将来有个数组来了,诶我我本身开辟了十个空间,但是因为需要,我就需要动态往里面增加,诶这个时候呢,我们就没办法,只能选择可变集合了,所以这个是两大类,第二个斯开了,为了在这个,嗯,在这个程序效率上考虑呢,它默认采用不可变集合,就是说如果你没有指定。没有指定到底是可变还是不可变,它默认优先选择不可变明白,而且在这里我说了一句话,几乎所有的几何类啊,注意啊,我说的是几乎所有,那就意味着也有例外。那你不要说,诶说韩老师说的所有集合都有结果,你说诶找到有一个没有对吧,那你不要给我叫满,因为我说的是几乎所有,那就说也有例外啊,可能是90%都有,那可能有10%它没有也是有可能的,那斯SC呢,都提供了两个版本啊,可变和不可变,那么可变这个单词呢,在我们这叫utable,不可变叫imutable,注意这个单词,这点我就不再多说,好,这是三句话很重要的,最后一句话也是非常重要。
07:26
哪个呢?在开中集合有三大类,三大类型,哪三大类?一个是序列这一大类,第二大类site这一大类,还有一大类叫map映射,这就它有三种类型。好,那么呃,这个呢,所有的集合几乎都扩展至这个特质,那么我们给大家来看一下,打开我们的这一个手册文档手册,注意听啊,今天这个课呢,实用性就比较强了啊,使兄记我随便找一个吧,同学们,我找一个历史的相关的。
08:03
好,各位朋友,看到我们历史的这里面有很多好,那么这个inun table,我就随便找一个历史的点进去,诶,我们看一下这个历史的的一个继承关系,往下一搂,我们发现有个。你看这个这个它就是从这继承过来的,那么这个是什么呢?后面再说哈,那再找一个啊,历史的map,你看也有这个itable,再找一个例啊,历史的site也有这个it。那么有些同学就问了,说老师你这样你这样给我看,我觉得很不舒服,为什么呢?因为这个inherited这个继承呢,他没有展现出他的关系,好的同学们不着急,老师呢,马上给大家来说一个特别重要的一个图形,这个图形大家是要注意的啊,好,我们先把这个开了集合的这几个介绍基本介绍说清楚啊,第一个大家要有印象的是开了支持不可变和可变两大类。
09:03
那么尽量使用不可变,为什么效率高,效率高第二大类两个名词默认啊,默认采用这个名词MU和UN,还有看三大类序列,Site和映射,也就是说在开里面一个集合呢,一定是归属于其中的一类。好,这是基本介绍,我们先给大家聊到这里,那下面呢,简单板书。好了,数据结构的特点,老师聊了几句话啊,我这就讲的比较简洁了。就直接把它最重要的给大家整理到这里,不重要的呢,我们在案例里面再体现。好的,老师刚才介绍的是集合的基本介绍里面呢,我说了这么重要的这么几句话,第一个。好,第二个OK,第二个呢,诶这地方没有走过来啊,好第三类。好,这是我们重要的三句话,大家要有个基本的认识啊,要有个基本认识别上去对吧,呃,连这个最基本的都忘了啊,那就麻烦了,好,这个有了过后呢,我们来一个快速的入门案例,我们来体验一下啊体验一下。
10:15
那么这个可变集合和不不可变集合怎么体现呢?怎么体现呢?大家看这里何为不可变,何为可变,聊一下开中不可变集合,就是这个集合本身不能动,不能动态变化,注意听再说一遍啊,是集合,集合本身不能变化,你千万不要这么说,说老师你说那个不可变的,我也可以加,也可以可以给它加一个,进行这个加的一个操作,也可以进行简的操作,你你说它不可变,再说一遍,是集合本身不能变化,集合本身不能变,类似于Java里面的数组,大家都知道,你们在学Java的时候,老师一定讲过一个案例,就是我们去Java里面六了一个数组以后,这个数组的大小就固定下来了。
11:06
就是说这个数组的大小只能是三个元素,你不能给他来第四个元素就会报错,我们这体现出这个动态变化,重点体现的是它的这个本身不能动态变化,不是说它的内容不能变化。啊,内容变化,呃,这个是是可以的,但是本身这个集合它不能动态变化,比如说对一个集合的元素增加一个,减少一个这样的操作啊,那么还有一个可变集合,可变集合指的是这个集合本身可以变化,你比如像list,我直接可以动态的增长元素,好,我来一个快速入门案例,这个案例呢是用Java来举例的。好,我把这个案例给同学们写到这里来,我们新建一个章节,新建一个章节,这个章节我们起个名字叫CHAPTER10。幺零好,我们新建一个小文件,OK,现在我们讲的是一个快速入门案例啊,就是Java的一个connection的一个DEMO。
12:07
快速的回忆一下,好,同学们在这里呢,我把这个代码,因为这些代码对于我们来说都是very easy的,所以说老师呢,就不啰嗦了,拿过来体验一下就可以了。好,同学们看这里呢,我们这代码有有些小问题对不对,好,我把这个稍微的整理一下。好,我先引入,我先引入这个包,这个包呢是我们Java u t里面的包,引入一下就OK了,大家看这里啊,什么叫不可变呢?就是说你这个数组一旦定下来过后,你就不能这样写了。啊,假如你这样写。其实你的本意是想给他的第四一个空间附一个90,但是这个地方呢,他就会报错对吧,这点大家应该很清晰的知道,你看这个时候它就不可变,不可变就是直接告诉你数组越界了,哎,但是并不说内容不能变,你比如说诶原先你这个是这个这个11,我给它改一下,诶我们还是对他二,我该超出什么变成22,这个是可以的。
13:12
啊,这个呢是里面内容变化,这个是可变啊,少了一个啊,这个是Java啊,少了一个,少了一个分号,咱们写进去看,这个是没没问题的,可以的啊好强调一下,那么什么叫什么又叫做这个,呃,什么又叫做可变呢?大家看这里可变先把概念说清楚,你看这儿有一个历史的集合,里面可以放时钟类型,可以放时钟类型,那么我可以想加多少个数据,我就加,比如说加一个张三,张三二张三三都可以,我想怎么加都可以,而且呢,同学们看,当我一旦加了以后,它的哈希code值其实本身也发生了变化,你比如说同学们看,先看这里。先看这里这个,呃,原先这个地址al,我加了两个数据进去,我们现在看一下它的地址是多少。
14:07
好,我们打出它的地址值,运行一下,哎,同学们可以看到它对应的哈希扣的值啊,对应哈的扣,假如就这个词啊,我就随便写了一下,然后呢,我又给它加一个东西,Very easy,我又加一个。哎,加完一个数据过后,我又重新打开第二个地址。呃,增加了以后地址地址二,我们来看看它的地址有没有发生变化呢?各位好,当我运行我们可以看到,我们可以看到它的地址呢,就发生了变化,那说明其实它在底层,它在底层,它其实也是一个动态混杂混会会中心开辟一个空间把东西扔进去,对吧?哎,它本身就已然发生了变化啊,所以说这个大家要做一个理解,好我把这个理解呢给大家放到这里来,这是我们讲的可变集合和不可变集合的一个理解,放到这里来,好给大家来个标题三,刚才讲了一个可变集合的概念。
15:12
对,那重点呢,就是要体现出这个集合本身不能动态变化,强调是它本身。那为什么我要强调这个呢?因为你后面发现呃,不可变的呢,也可以进行加的运算,减的运算也可以,但是它本身并不变化,它是返回的值,发发发生变化了,好第二个。数据本身可以动态变化。好,这有一个案例给大家举到这里啊,使用使用Java做了一个简单的案例说明,对不对,好,我把代码呢给各位朋友板书到这里来,好的,这是我们一个入门的介绍就说完了。来,走一个。好,截取一段视频。
我来说两句