00:00
来复习一下我们昨天讲的这个数组,打开咱们的一德瑞,好数组的话呢,我们是实际上讲的那个一天半的这个时间了啊,讲的东西呢,其实也挺多的了,那么数组这里边,我们昨天最后总结,最重要的呢,还是需要大家掌握一位数组和二位数组每个里边的六个点啊,这是最重要的啊,就是这六个点呢,相当于大家拿起来就能写相关的代码,或者说出相关的内容啊,这就算你合格了,或者说呢,已经是功底比较扎实了啊,然后基于这个一维和二维以后呢,我们谈了一些相关的操作,就是这里边写的叫常见算法了,好,首先第一个数组的创建和元素的赋值,诶这个呢,是基于咱们已已有的几个问题来说的啊,这个我就直接说咱们做的几个题目了,第一个呢,就是阳回三角,这呢是一个二维数组的问题,哎,然后对应的还有一个呢,叫回形数。
01:00
这个没有讲啊,哎,这个大家下来呢,有兴趣的你去看一看就行了,这个呢也是一个二维数组的问题啊,这呢都是笔试当中考过的。哎,笔试当中考过的就相当于呢,哎,他告诉你这是一个二维数组的问题了啊,关键呢,就是让你按照我的这个给的这个数据的特点去给这个二维数组去赋值,这就我们所说的跟元素赋值这个事儿啊,然后有的问题呢,它也没有告诉你是一个数组问题,像这个回应数就没有,哎回形数的话呢,就是说哎,我我输入一个五,然后你就输入一个五行五列的这样的一个数据啊,满足我们说的那个回形数的一个特点的啊,另样个特点啊,那这个的话呢,人家没有告诉你是一个数组问题,你得自己呢给它找一个载体,那你就想到数组了啊属于这种啊,哎,包括呢,咱们还有那个。嗯,也算是叫生成一个彩票那个问题哈,是一个异位数组,哎,这不是说六位数,呃,六个这个数,然后呢,一到30之间,这个随机生成不重复等等啊这呢都是咱们讲的这几道问题啊,这个题呢,也没讲这个客户呢,大家想做的话呢,你看下那个word就可以了,像这些问题呢,都算是涉及到叫关于数组的创建和元素的赋值啊,负载这些值呢,满足人家的一些要求啊,这个在笔试当中呢,有时候会出现这样的问题啊,或者大家实际开发中呢,根据你项目的需求,有时候也会写这样的一些小问题啊,但是通常呢,不会说像这种比较难了啊,像这种已经算是比较难的了啊,大家呢,其实也没有必要非得去研究这些题了啊,就是咱们刚开始学呢,把这个基本功打扎实的更重要一些啊,不用研究这个偏题难题,第二个针对于数值型的数组。
02:54
数值了,数值呢,典型的特点就是能够做加减乘除了,哎,所以这里边呢,我们涉及到叫求最大值,最小值总哎总和平均数诶等就这样一些问题。
03:13
哎,我这写个等哈,还有你比如说像求这几个数的一个方差呀,等等的方,方差还还记得不忘了是吧?嗯,方差呢,主要来衡量数据的什么特点啊,就稳定性或者要波动性对吧,你要是给的数组中的这几个数,它们要是波动呢,特别大,这个方差的数呢,就会比较大,哎,你要说这几个数呢,特别平稳特别平稳,哎,然后呢,这个方差呢,就会比较小,它实际上呢,相当于是这个跟平均数去求了一个这个平方和,再在开方是吧?哎,平方和不开方,那个方差开方呢叫标准差啊。
04:02
好吧,应该都忘了是吧?啊忘了就忘了,这块呢,一般呢也用的比较少啊,那这样呢,你需要用到了这个都会一般呢提供相关的一些方法,让你直接调的啊行,第三个数组的赋值和赋制。不是元素了啊,是数组本身这个变量,比如这里边我们上课做的那个练习,A re1 a瑞二,哎,这个负值,这就是非常简单的一个赋值了,这叫赋值,哎,那么如何去理解上述这个代码的过程呢?对我们说呢,是实际上是啊将。对,将我们这个2V1,哎,它呢,保存的数组的这个地址值赋给了咱们的2V2,然后呢,使得。哎,这个哎,使得使得呢,我们这个尔维一和这个尔维二,它俩呢,共同指向堆空间当中的同一个数组实体,共同。
05:15
指向堆空间中的同一个数组的实体。能理解吧?诶都没反回来清楚吧,哎,清楚这个啊,这个得清楚才行,那把这个图呢,咱们粘一下。这个哎,这里边呢,衡量就是他俩呢,实际上是是两个变量啊,这要注意它俩是俩变量,只不过存在地址一样啊,指向的是对空间中的同一个啊,就这个意思,这个我们粘一下啊。
06:06
好,这是它这个过程,下面一个呢,就是叫复制了,你真正的你给他实现一个复制操作,呃,这个咱们昨天其实也写这个操作了啊,这个我再快速的写一下。这个。诶,瑞二第二个变量,瑞一的第二个变量去负,哎,这呢是一个复制操作。行,嗯,哎,上面少了一个这个啊二瑞二呢,接着去扭一下,哎这样子啊,这呢叫一个真正的复制对应的图的话呢,是咱们这个。好,那为什么这里边呢去强调这个事儿呢,咱们讲今天讲面向对象,面向对象呢,咱们要创建类的对象,类的对象这块呢,跟这里边这个类似,类似什么意思呢?就是我这儿呢,比如说是一个对象二,上面这个瑞一呢,是一个对象一,如果你把对象一的这个变量呢,这样的方式给了变量二。
07:21
他俩呢,仍然是地址值一样,然后在对空间中呢,你是同一个对象实体。嗯,如果要是这种方式,我们重新拗了一个,对于瑞二来讲是吧,那就是个对象二了,我重新一个对象,那在堆空间中它就有两个对象,有两个对象呢,如果你改变其中一个对象的一些属性,它不会影响另外一个对象的这个属性,因为大家呢,你一份我一份是吧,哎,大家呢,互不影响,哎,这个也适用于咱们今天讲的绵向对象,重点对象,所以这个都是一脉相承的啊好,这个如何理解啊,那呢,就是说,嗯,我们通过这个new的方式,嗯,给这个AR啊,在堆空间中啊,这个心开辟了啊,这个数组的这个空间啊空间,然后呢,将。
08:23
哎,将我们这个瑞一它数组的这个值呢,一个一个的复制给A瑞二数组数组中的这个元素值。那一个一个的,哎,赋值给哎,我们这个A2这个数组中,那值倒吧。哎,这呢是一个真正的复制,OK过了啊,下一个数组元素的反转,这个就不写了,这个咱们昨天也讲了,写了两种方法。
09:02
反转啊在这呢啊这两种啊,CTRLC一下就是这两种呢,就不加区分了,大家用哪个都可以啊。行过了啊,下一个说数组中指定元素的查找,这是我们要做一个查找操作了,这个查找呢,也可以叫做搜索啊,或者是叫检索。哎,这个一个意思啊,这个在实际这个开发当中,其实还经常会出现,呃,这呢其实就是个查找了,大家想想,比如说你平时这个,呃,看这个咱们手机的应用,呃,尤其是这个这个买东西的这个应用是吧,我们通常都会有一个查找,一个检索啊,这块你想搜索什么什么数据,这些查找的数据呢,都是来自于我们的这个数据库的,那这块呢,我们得保证呢,查找的这个速度和效率啊,这个呢,后边咱们讲数据库的话呢,大家会接触到关于数据库这个操作呢,典型的操作就是增删改查,诶增删改查这个是数据库最常用的操作,咱们呢,其实只是呢,对于用户来讲啊,他通过这个前端的一个页面呢,它不断的去实现增长改查操作,比如说你想查一个水杯,这呢就是个查询操作,查完以后的话呢,就感觉得这个不错,你就下单买了,然后买完以后,其实你这个数据,包括你放到这个购物车里,它后台呢,都会有一个购物车相关的一个表。
10:31
你放到购物车里了,它就相当于把这个数据呢,给你添加到这个表当中了,你从购物车又移除了,它就从这里边就删除了。嗯,他呢也是会把购物车的数据呢给你存到后台的一个表里的,因为你会发现手机端呢,你放到这购物车里呢,你用PC端浏览器去登录,发现购物车里边还有那个产品,是因为呢他写到数据库以后,你又通过另外一个端呢去打开,那就把后台数据库的数据呢又给你查找,显示到我们这个浏览器的页面当中了。啊,这个都是有后台的数据库的这样一个支撑,那其实数据库呢,体现出来的就是不断的进行增删改查,那么在这个增删改查里边的话呢,查询是最多的查询操作是绝对的是占到绝这个很高的一个比例的,那这个查询其实就相当于我们在检索数据一样,就是在查找数据,就这样的,尤其是我们数据库中的数据,假设呢,你达到百万条甚至上亿条数据的时候,那如何去保证它的效率啊,这个是我们值得思考和考虑和这个研究的一个问题啊后续的话呢,咱们讲这个框架的时候,那我们讲项目的时候呢,也会使用到相关的一些,呃,这个检索的一些框架啊,比如electric search solar等等,那到时候呢,我们再说啊,现在的话呢,我们先接触一下最基本的这种查找的实现,那第一个呢,叫做线性查找。
11:53
对,就是咱们昨天讲课所说的那种叫地毯式搜索啊,一个挨家挨户啊,一个一个的这样去找啊,这肯定漏不了是吧?嗯,那线性查找的话呢,它的一个实现思路就是通过这种便利的方式啊,这个呃,一个一个的数据进行比较查找。
12:17
哎,这是这样的啊,那么它的适用性呢?适用性方面相较于二分法是不是要好很多呀,应该说这种方式是不是就具有普遍适用性啊,嗯。嗯,这个普遍适用性呢,就是针对的说你这个类型上没有严格要求,不一定非得是数值型的,或者说其他类型的哈,另外的话呢,这个数组本身呢,也没有有序无序这样的要求。啊,这就是普遍的适用性的,那对于二分法查找它的实验思路呢,就是每次呢,啊这个比较这个中间值,哎,然后呢,折半的方式。
13:04
哎,这个检索,哎中间值然后小了,哎,这个找右边的这个数又大了,找左边了等等这样的啊它的适用性。它的前提是什么呀?对,前提呢,要求我们这个数组必须要有序,哎,速度必须有序,这样的话呢,才可以进行二分法的查找啊好,这就过了。下面关于数组的一个排序。排序这块的话呢,我们首先呢,提出来的整体上都有哪些排序的方式,这有一个图啊,叫十大排序算法,这个也拿过来。诶,保存一下十大排序算法,就是最起码大家知道有十大啊,别人如果跟你说啊,我们这有八大排序算法,你告诉可以明确告诉他说不对,有十种啊,因为常常提到的呢,其实是八种啊,就这八种,这两种呢也是,所以加上人家这两种一种一共呢算是十种,包括你去网上有时候查一些帖子,有时候也就写八种,其实呢,完整的是十种啊,只不过这八种呢,相对来讲我们提的要频率上要高一些而已啊,那么这十种的话呢,没有必要大家每个都去看,需要掌握的呢,或者你关注的我就这个用其他的颜色标识出来了,两个档,需要手写的,需要理解这个排序方法实现的,其他的呢,不用看。
14:30
哎,就这样啊,第一个我们去衡量一个排序算法的优劣的指标是什么,哪些指标啊,时间复杂度对吧?嗯,然后还有空间复杂度,还有一个稳定性,诶稳定性啊,这个稳定性呢,不是说所有的这个实际操作中你都需要去关注,看看你这个实际问题,昨天咱们举了一个例子,就是说在我们已有的这个销量从大到小的基础之上,你再想实现价格的一个从低到高,那就保证两个价格如果一样的话呢,原来销量高的那个还得在上边,这就要求是个稳定的,如果你要平时用的话,没有这个要求,说排完以后呢,这个相同的谁在前示在后无所谓,那你就不稳定的也可以,那在这三个里边,我们最关注的呢,对,很显然呢是时间啊,很显然是时间啊,不用多说,这个大家都清楚。
15:29
好在下边排序的话呢,这个分类分成内部和外部,这个也比较简单啊,内部就是管用内存就行,哎,外部的话呢,哎,就是需要涉及到这个这个这个磁盘了,哎,我们这个管加载内存数据量太大了,一次性加载不过来,诶需要借助于这个磁盘啊。哎,磁盘OK,这个呢,我们就不详细的展开去说这个问题了,然后下面呢,提到前面呢,我们说了十种排序算法,那么这些算法的时间复杂度呢是不一样子的,哎,这我们下边有专门的一个图。
16:13
哎,这个图呢,显示到他们相关的一个对比情况,那这个呢,大家也是了解一下就可以了,了解一下就可以了,哎,需要关注的呢,就是我们那会儿这个五道题的时候提过啊,它的时间复杂度,冒泡的时间复杂度,这两个得知道啊行,这是这个问题下边呢,需要手写一个冒泡,这个咱们都写了都啊。到这儿啊CTRLC,好把这个字呢,稍微小一点啊好不多说了,这个呢就这样,那接下来呢,我们说到一个工具类叫做ari,首先呢,关于as的一个理解啊,第一个呢,我们说它呢是定义在呃这个Java点诶U这个包下。
17:14
呃,后边呢,咱们讲完讲到面向对象的时候呢,说一说啊,关于这个包啊,包括包括这个import啊使用的一些细节,其实现在呢,大家也都基本上会用了,就是咱们写的代码呢,都会把这个类或者这个原文件呢,都放在一个一个的包下。嗯,就这个包的话呢,它有特别的含义哈,咱们这儿写的比较简单一些了,就我这儿呢,写的都是一些新代码,就咱们讲新课的代码,这个呢是写练习的代码啊,你要真正在一个工程当中,那就复杂的多了,一个工程可能有几千个,甚至上千个,几千个类,那这时候呢,你怎么去区分它,首先还得有大的这个子模块,模块下边再去分包,包下边再去分类,那就很庞大了,你不可能说没有包的概念都怼到一起,那代码看着就特别的繁琐了,诶咱们呢,通过这个包呢,去区分不同功能的代码,这样啊,那么在Java给我们提供的API里边呢,其实有一个包呢,叫做YouTube,你看它这个名字也知道,就是工具类是吧?诶像咱们之前用的那个scanner,对,这也算是个工具了,所以它呢都是放在这个里边的啊,诶第一个呢,是定义在这个YouTube包下啊,第二个呢,就是这个类到底是干什么用的,哎,我们说呢,它呢提供了啊。
18:31
这个很多,哎,操作数组的这个方法,哎,大家呢,有需要的时候呢,直接来这里边去找一找啊就可以了啊,找不到了你再自己去写。或者说呢,就是你自己写的时候呢,结合着他给你的啊,你可以结合一部分是你写的一部分呢,是他给你提供现成的啊这样啊呃,然后呢,接着咱们是做了几个测试,就测了一下这几个方法,这呢,咱们把这个测方法的这个拿过来吧,从这开始。
19:02
来到这儿啊,CTRLC。行基本的使用。啊就这样啊行,那在后边呢,我们提到这个常见的异常,两个大家呢,能够,呃,不是说大家需要大家说这个一写能够写一个异常,一写写个异常那就坏事了是吧?不是让你去写异常的哈,是通过这个讲解异常呢,哎,咱们知道这个异常你到底问题出在哪,诶大家写代码的时候呢,你去规避这样的异常,哎,这是我们讲异常的一个这个这个意义所在啊。诶,还有一个控制针。哎,CTRL一下。啊,这是这样的,这个几个情况啊,那咱们昨天还提到关于异常,其实一个小的知识点。哎,小知识呢,就是说一旦程序出现异常。哎,是不是就终止执行啊,嗯,终止执行啊,这个前提呢,是我们没有去处理异常的情况下啊,那一旦程序出现异常未处理吧,嗯,就终止执行了,就像我们说一个人一样啊,这个人的话呢,嗯,没有生病,活蹦乱跳的,就像你在执行这个程序,然后突然呢,人生病了,然后就相当于程序出现异常了,这时候一生病就歇菜了啊,什么也干不了了,你这样去想就可以啊啊那得吃药啊,那吃药的话呢,其实就相当于异常的处理啊,那怎么去处理,这个咱们放到这一张叫做异常处理啊来去总结一下,讲解一下怎么去吃药处理是吧?好,这呢是咱们复习的内容啊,就到这。
我来说两句