00:00
好,那么关于数组的话呢,咱们这个内容呢,就是告一段落了啊,然后首先呢,咱们针对数组这块呢,做一个复习啊,复习完以后呢,咱们就开始下一章啊,面向对象诶找到我们这个第五章数组。好,那么这块的话呢,关于适当复习呢,我就不再刻意的去粘这个代码了啊,因为这个代码呢,咱们已经是相当于呢写成这个模板的方式了啊,大家呢,就按照这个顺序呢依次呢去练啊,就比较清晰了,好,那这块呢,关于数组这块,我们整体上啊做一个复习啊,把这个内容呢,由薄由厚呢变薄啊这呢我们看看整体呢,我们讲了几个事儿啊。诶,首先第一个呢,我们看可以看到的是针对于数组的一个整体的一个概述哈,啊这呢,我们就看成是第一个点了。然后第二点的话呢,我们重点呢,就开始讲了,讲叫一维,呃,数组的一个使用。OK啊,然后紧接着呢,我们谈的叫二维的数组的使用。啊,没问题啊,接下来呢。想想后边。哎,数组的这个常用的算法问题是吧,OK啊,然后再接下来啊,第五个点。
01:05
来提到这个ari这个工具类的一个使用。OK,然后最后一个内容呢,哎,数组中的常见异常。OK啊行,那整个来说的话呢,我们这个内容就是这样的几块,那么这几块里面呢,呃,咱直接说呢,比较重要的哈。毫无疑问啊,异位数组的使用是很重要的。那么二维数组使用呢,这块顶多我们看成是一个难点啊啊,因为我们也讲了,其实本没有所谓的二维数组啊,只是一维数字里边又套了一维数组,所以说呢,二维数这样理解的好,一维数组是基础啊。啊,那另外的话呢,关于这个常用的算法呢,就体现为我们在平时开发当中主要使用的一些场景啊。啊,那其实有一些常见的操作呢,我们,呃,一方面啊,由俄瑞斯这个工具类的一些支持,我们可以呢,直接呢去调这个工具类啊另外一方面呢,实际上我们常见的开发中使用数字的时候呢,都不是太复杂。
02:02
哎,都不会太复杂的啊,当然呢,总归呢,都算到这个常用算法这个体系里边了,诶剩下这块呢,其实就是一些具体的补充内容了啊,所以核心的哎非常明显就是第二块和第四块。啊,首先我们来看这个第一块关于数组的概述哈,这呢就提到了说数组这样一个概念啊,所以简单来理解呢,数组哎,就可以理解为叫多个数据的组合。哎,可以。理解为。哎,多个数据的一个组合,简称呢,就是数组啊,就这个意思啊,所以从这个角度来讲呢,多个数据,哎,多个数据啊,所以呢,我们就可以呢,哎,把它呢看成是一个容器了啊,是程序中的。容器。呃,容器这个词呢,跟我们生活中说这个容器呢是一个意思啊,那除了我们讲的数组之外呢,以后我们还会讲。哎,这个叫集合框架。第一框架,我们在第12章当中来去讲解,在第12章呢,我们回去讲,比如说像list。
03:04
啊,像这个set啊,像这个map啊,这呢都是具体的一些,也是一些容器了,哎,当然我们再看呢,它们的特点是什么,为什么容器怎么还有好多呢。呃,因为呢,我们这个数据啊,呃,在实际啊开发当中发现呢,他们的特点呢不太一样,呃,有的呢,像我们使用的数组,就是在内存当中依次紧密排列的多个数据是有趣的。啊,所以这块我们可以再说一下数组,它存储的数据的特点哈。首先呢,他在内存中是一次。解密排列的。哎,这个没问题,哎,然后还有一个主要的,它是有序的。有趣的就是呢,诶,你把它放成角标一的位置了,它跟角背二的位置呢,就不一样啊,角二的位置就不可能是它,所以它有一个索引的概念。只要有这个,只要说是有序的,就会有这个索引的概念啊呃,另外呢,我们相较于其他这些结构来讲呢,它有个特点就是可以重复的啊。
04:07
这个指的就是这个元素。哎,是可以重复的,哎,比如说第一个元素呢是十,哎,我们第二元素呢也可以是十。那这呢,就是它的一个主要的特征。好了,那么以后的话呢,我们还会讲到其他的一些结构啊,其他的这些容器呢,有的呢,他不是一个挨一个放的啊,就是接触过数据结构的同学呢,就知道它会有这种链表的这种结构啊。哎,包括呢,还有这种树形的结构。啊,这呢,都涉及到他们就不是依次紧密排列的。然后有的这个元素之间呢,它不是有序的。啊,就是是一种无序的状态,哎,你像我们这个set啊,就是你先放谁后放谁无所谓,反正在这样的一个容器里边就可以了。举个例子啊,你比如说这个,嗯,有好多这个企业的老板是吧,然后呢,这个公司花了以后,国家呢,就把它列入叫失信人员名单了,是吧。啊,那么失失信人员名单呢,就是这样的一个容器,这个容器里边你先把啊谁放进来啊,把那个贾老板放进来了是吧?呃,再把谁放进来,你先放谁后放谁无所谓,诶所以呢,就没有顺序之说了啊就是有这样特征的啊啊那么也有呢,就是这里边是不允许放重复数据的啊,你放进来某一个这个值,比如说十了,你就不能再放20了。
05:22
那这种就是不能重复了啊,就是特征不一样,那我们数组呢,只是这样的特征的,以后呢,我们再讲其他的。好,那不管你是数组也好,还是集合框架也好,我们还有一点要明确的,此时咱们谈的多个数据放在一起构成个容器,这个容器呢是在内存层面。对数据的一个存储啊。哎,此时的这个数组啊,包括呢,我们后边讲的这个叫集合框架啊。哎,都是在内存中。啊,对数据的存储。哎,对多个啊,数据的一个存储。
06:02
存储OK啊好,那么以后的话呢,我们还会提到啊,你想把这个数据呢,存储到这个磁盘上啊,这样的话呢,我们才能做一个持久化了,那么到时候会讲到IO流,包括呢,以后我们还会讲数据库是吧?哎,那么IO流呢,我们会把数据呢存储到文件里边,比如一个点T文件。啊,或者呢,你后边我们讲数据库,把它真正存储到某一个表里边了,来做这个持久化,待会我们再说那个问题啊呃,那因为呢,我们说这个CPU哈,以前咱们也讲过,CPU呢,它交互数据呢,都是来自于内存了。啊,那么内存呢,这个数据呢,它可能是取自于我们的这个磁盘呀,或者数据库啊都有可能,哎,所以说呢,我们这个内存当中啊,肯定还是需要用到容器的,哪怕呢,你把这个数据呢,存储到是这个数据表里了,或者是存到一个文件里了,你要把这些多个数据呢,读到CPU当中做运算啊,我们还是需要呢,先读到内存里。那一旦你要读到内存是多个数据,你就得考虑是用数组还是用几何框架了,所以这两个结构呢,是我们离不了的啊。
07:04
好这呢,就我们提到这样的特征,然后呢,另外呢,针对于啊数组呢,咱们除了提到这个啊,这儿呢,咱们是相较于其他的这个容器来讲啊,诶那同时呢,我们还讲到一个数组的一个特点啊。哎,速度这个叫其他的特点这块呢,大家要重点关注的什么呀,我们说呢,就是一旦。哎,初始化是吧。哎,其长度就是确定的。啊,这个呢是一点,然后另外呢,是不可更改的啊,这个特征呢,也就决定了我们后续的一些算法操作呢,大家要兼顾到这样一个特征,比如说你的扩容啊缩容啊是吧,哎,都要想这个事儿了啊。行,那么整体上呢,大家关于数组这块呢,诶有这样的一个认识呢,我觉得就可以了啊,这个呢,是不涉及到代码这个层面的,然后具体呢,关于EV数独的使用啊,咱们在讲解的时候呢,就是基于咱们说的六个点啊。那这个我就不看他了,看我们下边这个啊。啊,就是呢,我们讲的这六个点,把它呢粘过来。
08:03
啊,就这六个事儿啊,哎,这六个事儿呢,毫无疑问啊,像最初的咱们去创建一个数组这个代码的话呢,必须要会写啊,这要不会写,那这数组这章呢,就白讲了是吧。哎,我们去扭一个啊,这呢直接写上一个长度,这叫哎动态初始化是吧。那这个呢,你可以指明各种类型的啊。哎,String类型的,哎后边有个大括号叭,如这里边整一个叫哎汤姆啊,哎Jerry啊,这个就放俩了啊哎这个呢叫静态输入法,哎这个呢,拿起来就得能写。OK啊,这个Java的话呢,我们习惯上是把这个类型呢写到前面对应的中号呢,就也写前面一看类型就看这了。啊,那仿照的这个C或C加的写法呢,就是说诶你放到把中号放后边也行,呃,当然呢,我们呃看相应的一些源码的话呢,诶大家都习惯上去写前面啊,所以建议大家呢,你也就写前面就可以了。啊,调用这个指定元素呢,就是使用这个角标啊。哎,角标啊,或者我们叫这个索引呀,都可以啊。
09:03
哎,这个一定要小心的就是。哎,这个索引index从零开始是吧,哎,这个一定要注意它啊,好长度呢,这个叫less,不多说了,便历,哎,这个变历的话呢,其实本身呢不复杂啊,那我们其实有好多这个算法操作呢,都是基于这个便利呢去实现的。反转复制。是吧,包括呢,我们说呢,去扩容一下啊,你也得把原有的数组的元素都得给它copy过来啊,这个都是跟电力相关的啊。然后这个点呢,就是默认初始化值。啊,这个大家都还是得记一下了。啊,这个咱们上课这不也都说过这个事儿了,这个我就不往这粘了啊,这个都属于我们讲的基本点啊,都得会啊。好,那么这个一维数,这个内存解析呢,这个我们再稍微再唠叨两句。哎,咱们讲到面向对象的时候呢,还会继续说内存结构的事儿啊,那其实呢,咱们从讲数组开始,已经算是进入面向对象。啊,怎么讲呢,你看这块呢,其实出现这个new了,呃,New的这个结构呢,这块呢,其实就在对空间我们需要呢,放对应的数据了,只不过呢,这时候这个数据啊,咱们没有刻意的去说,哎,它的这个类型啊,这个数据有多个。
10:15
它可能是基本数列型,也可能是影数列型啊,你要是int呢,其实这就是算基本数列型,那是个string。此类呢,其实就是一个类类型的了。其实这已经算是叫。我再叫个名啊,叫对象数组。你看每一个位置呢,其实类类这块呢,呃,其实这块没有引入这个概念哈,我们到时候一讲变量对象就知道了,哎,这呢是一个类型了,它具体的一个实例啊,或者叫一个变量呢,其实就是一个对象了,这就是个对象。哎,那么有多个对象呢?放在一起构成个数组,这就叫做对象数组,这其实就已经是了。只不过呢,咱们又特意强调这个事儿而已。OK啊,行。嗯,OK啊,再拉回来,那么关于这个内存这块的话呢,大家呃,重点要关注的啊,就是我们提到了,咱们把这种代码到目前为止都是声明在了没方法中。
11:06
那这呢,咱们先看成是一个前提了哈。这个呢,其实也比较重要啊,要不的话呢,这个呃,描述的话呢,就我们不够精准了啊,前提呢,就是咱们在没方法中声明这个变量是吧,或者我们声明了一个数组,我就举个例子。哎,就以它为例啊。哎,你有一个特星的。哎,这我写个123啊好,就以这个为例啊,那么这个里边呢,我们说大家就把这当成是一个典型的代码就行,首先呢,我们提到这个栈结构啊,再说呢,这个叫堆结构。这个站的话呢,其实我们要说全的话呢,叫做虚拟基站啊。啊,因为还有一个站呢,叫做。本地方法站。呃,当然那个本地方法呢,就涉及到C的这个代码的调用了啊,咱就先不管了,诶这个呢,首先叫虚拟驿站啊,也称为呢就是站啊。这个虚拟站里边呢,在针对我们这行代码当中存的是谁呢。
12:02
啊。详细来讲的话是这样的啊,在虚拟战当中啊,诶我们首先呢,是执行这个魅方法,首先呢,我们会发现呢,就是魅方法,首先它呢作为一个战争。啊,然后呢,压入占空间中。哎,这块我想强调的点,我们讲面向对象也会说,就是每一个方法都会对应着一个战争。然后呢,战里边放的就是一个一个的战针,这是战啊,一个战针两个三个四个,每一个战争对应的就是一个方法,只不过现在呢,我们就只接触过那方法。好,那么没方法呢,作为一个战争就压入啊占空间了,好了,那么在这个没方法的这个战争中。哎,相当于它呢,存储着,哎,我们的AR这个变量。也就是说呢,我们这个AR呢,它是放在这个站里边。我这说的也比较空泛哈。
13:01
实际上呢,再说呢,这个战争呢,又分好几块。啊,这是一个战是吧,这里边叫战争是吧,这一个战针呢,又分成叫局部变量表。曹头是站。动态链接。啊,返回值地址。附加信息。五块是吧,然后呢,其实它只是放在了战争里边的局部变量表里了。当然这一说呢,就就太太多了,咱就先不想那么多啊,你就说呢,直接就放在战争里了。OK啊好,那么这个战争里边呢,就是放的变量,这个变量就是你在main方法中声明的这个A2这个变量。啊存储它,然后这个A2呢。哎,它呢,作为一个变量,它存着一个数据,它存着谁。对它呢,我们说哎,保存着。或者要记录着啊。哎,咱们这个堆空间中,或者叫直接呢,就记录着我们这个数组。呃,整体啊元素,哎,这样怎么说呢,数组实体吧。
14:01
它的一个首地址值。哎,首地日值啊,也就是说呢,我们右边呢,New的这个数组叫123,它呢,首先是存放在这个堆空间当中的啊,这我这样说数组实体啊,存储在。哎,对。空间中。啊,这个没问题,好,那么在对空间当中,我们就有一块连续的空间了。哎,这块空间里边就存着123,哎,我这块呢,想强调一点呢,就是第一个元素呢,它的这个首地址哈,它呢,就作为了我们这个AR呢,记录的这样一个地址。啊,就记录的是它这样的话呢,咱们不也说了第一个元素呢,它用的是角标零,就是来算这个偏移量的啊,因为这个我们这地址就是它的地址了,所以偏移量就是零。那就这个意思。好,那数组的实体数组。它的实体呢,存储在堆空间当中,也就是我们这个123呢,哎,就作为这个实体就在堆里边了,哎就长这样。哎,只要呢这个呢,大家把握住了,包括二维数组也是这样的一个原理,那你这块在画的时候小心一点就可以了。
15:05
行,这呢,我们把这一维呢就说清楚了,那么关于二维的使用呢,呃,首先我们需要明确一个事儿哈。诶,那就是我们一开始讲二维的时候呢,提到的这个点,大家要理解说为什么没有所谓的二维数组。所以对于二维数字来讲啊,实际上呢,就相当于是啊,或者我们。看看看前面的吧。看这啊说呢这个呃,数组呢,属于引用数据类型的变量,数组的元素呢,可以是基本数据类型,也可以是引类引用数据类型,那么我们数组的元素就可以是数组。哎,如果数组元素又是数组,那它就构成了二维数组。啊,就是这样一个道理,所以呢,首先啊,从这个。理性上是吧,你得能够接受这样一个事儿哈,哎,所以这个二维数组,哎,这个怎么理解呢,就是哎一维数组的元素是吧,又是一个一维数组。啊则。哎,构成了啊二维数组。
16:02
所以呢,我们说啊,其实没有所谓的二维数组啊,只不过呢,就是我们把这样一个特征呢,就称为叫二维数组啊。行,那么关于二维数组的一个使用的话呢,我们这块仍然是讲了六个基本点啊。哎,还是我们说的这六个事儿啊,CTRLC。啊,这个我们就粘过来,哎放到这儿啊行,那这个我就不过多的去强调了啊,初始化呀,指定元素啊,其实这个呢,只要一位这块清楚的二维这块呢,你相应的给他去匹配上哎就可以了。啊,就没有问题啊行,那么相应的二维数组的内存解析呢,相较一位来讲呢,哎,我们说呢,就稍微的麻烦一点啊,因为呢,你这块指向的一个一位数组,一位数组元素呢,又是个一维数组,所以呢就构成这样一个特征。那就这样一块这个效果。行啊,在内存当中啊,你注意看我们这个A21啊,这个呢叫三二,它长得是这样子的啊,它可不是说呢长这样啊。哎,我这儿呢,是一个三行两列的。
17:01
啊,在堆里边,这放不下了,放到这儿了啊不是长这样的。要长这样的话呢,那那就好像说有所谓的二维了是吧。啊,或者你这样在想哈,如果要是真长这样,那我要说个三维呢。三维得是立体的,那你的电脑能是立体的了,那硬盘还得是立体的是吧?来个四四维数组。他想象不出来了是吧,诶,所以内存龙肯定不是长这样的啊。对啊,它就是一维里边又套了个它如果这个元素呢,还是一个一维的,这不就是三维了吗。哎,如果这个元素呢,还是个一味的,这往上一撇,这就四位了是吧。哎,所所以呢,就是只有这个一位数组之说,只不过呢,就是是吧,接着往下指就行了啊。好,这个再拉回来这块呢,稍微有点难度啊,具体的话呢,呃,建议大家诶刚开始我们接触的时候呢,这儿呢,可以不当成重点。啊,那它存在的意义是什么呢?就是你看一看我们讲的其他的这五个知识点啊。你是不是特别清晰的能理解。你比如说我们讲二位数组这个默认初始化值的时候。
18:04
嗯,这个二位二位数组啊。你看在这块讲的时候呢,我们说的呢,就是诶你这个如果呃初始化方式呢,是长这样,我们外层呢是地质值,内层呢是这样,如果你要是呃这样的一种初始化方式呢,外层存储的now里边呢,就会控制人了,就是说这个内容的时候呢,你是不是清楚。如果这个不清楚,哎,那么你可以画一下内存图。哎,如果说这块你很清楚,那内存这块呢,其实也可以先暂时放一放也行,因为我们后边的讲面向对象都还会不断的去画这个内存结构的啊,反复反复的去强调啊,这个呢,自然而然的也就清楚了啊呃,再一个呢,就是关于我们在测试的时候,比如说我们在呃调用数组元素的时候是吧?啊,一会儿这样调出来个值,一会儿另外这样调又出来个地址是吧?哎,这个你得知道是怎么回事哈。这个呢,都是基于这个内存结构,你清楚了,那前面调用就没有问题。所以呢,它可以看成是我们理解前面五个点的一个工具啊。
19:00
好,这个我们就说完了。重点还是在前面一维的使用啊,好,下面我们提到这个数组,这个常用算法啊,回忆一下我们讲了几类问题啊。啊,第一类啊,我说呢,就是数值型,哎,数组的特征值的一个计算啊。最大值、最小值。哎,总和。平均值等是吧,哎,这样的一些需求啊,其实不太难,但是呢,开发中还是挺常见的啊,所以这个呢,你得会写啊,啊这一类问题,第二类问题啊,数组的。元素的赋值。哎,这个赋值问题啊,哎这个比如说哎,咱们讲那个洋灰三角。力阳三角,他可能没有跟你说这个载体啊,他就说呢,我们希望呢,打印出来一个洋灰三角,然后呢,满足什么样特征,告诉你说这就是个洋灰三角没了,他没有告诉你说你用数组去去去打印去装是吧,这个你要能够想到哈,我得用数组这样一个载体啊去做这个问题,还比如说呢,咱们咱们那个客户呢,不是有道题,呃,你可以成为呢,就是呃叫什么呀,彩票随机生成那个数那个是吧。
20:09
哎,随机生成,哎数。啊,就是咱不是说诶六位的这个彩票嘛,是吧,然后呢,这个每一个呢,是一到30范围内的,然后不能重复。啊,这个话呢,它就告诉你这是一个数组了,然后呢,你满足这样特征就可以了,他比如说呢,我们稍微提了一下,那个叫回形数。啊类似的啊,这个呢,都是哎,用数组啊,来去这样一个载体来去装这个数据,然后这个数据呢,满足人家要求的这种特征。啊,去解决就可以了啊。啊,这是我们说的第二类问题,然后接着呢,就要数组的一个复制。啊,复制我再加个词儿叫赋值是吧。哎,这个呢,注意它们俩的区别啊,一个呢,就是真正的你得在新开辟一块内存空间。一个呢,仅仅是心造了一个变量。哎,不太一样啊,这个注意。
21:00
好,另外呢,我们叫数组的一个反转是吧,哎,这个操作啊好这呢算是我们课件里边呢,对应的这个叫第一波的算法了,诶第二步呢,我们提到叫数组的一个扩容。哎,缩绒。啊,这块的问题啊,哎,扩容的话呢,相对来说呢,是比较常见的,一般呢,就是我们先啊到后边我们会发现这样特征哈,并不是说呢,我们这个造个数组,存几个我就先存满啊,就是需要几个我就造几个,很多时候呢,我们都是先给他一段空间,然后你再往里放。比如后面我们后边有相应的这个项目是吧,项目的时候呢,就是说诶我们呢,先比如这是个银行啊。哎,这个银行的话呢,我们就可以存很多的客户了嘛。哎,客户的话呢,比如我就叫做customer。其实这就是对象数组了啊哎,每个位置呢,相当于都是一个对象。那银行里边呢,可以有很多的客户,那我就先把这个数组呢,我得先造出来,假设呢有十个客户啊,当然实际情况呢,可能很多啊,比如100个也行啊,那这个数组的长度呢,就是100。
22:04
它代表的就是我们最多放100个客户。他可不意味着说我们已经放了100个。那你第一个客户过来了,我们就放在第一个位置,第二来了,我就放第二个位置,第三个来了,我就放第三个位置。那么注意,我现在放了仨,我要是调这个数组点length的话啊,是几。是三还是100?对,这个一定要注意是100啊,这个L的话呢,表示的就是你最多能放几个哈,那这呢实际上你放了仨。那没办法,你得自己定义一个变量。就是你每往这里边放一个的时候呢,你自己呢,让这个变量加加一下是吧,哎,你自己额外的去订一个变量啊,就跟我们是我们去饭店吃饭一样啊,这个饭店呢特别大啊,最多呢能有100桌,但实际上呢,今天中午一看啊,疫情受影响,就三桌三桌人在这吃饭呢。是吧,哎,这就是实际的就存了仨。这个意思啊,那一般呢,我们在这个内存当中啊,造一个数组去装数据的时候呢,通常都会先给一个指定的长度,这呢就指明了它的最大容量了,那在实际使用的时候呢,啊,你说没有用那么多,那就这边就空着。
23:09
啊,一旦呢,你这块使使用使用,哎,最后呢,发现不够了,我们就扩容,所以扩容的这个,哎,相较于缩容来讲,扩容用的是比较多一些的。OK啊。那真正的我们到时候需要空的话,一般也不需要咱们自己写哈。他底层都写好了,你就只管往里放就行。不够了,它就自动过了。啊,非常的方便哈。啊,这呢是一类问题,第二类问题呢,叫数组的一个叫查找是吧。哎,我们提到了有两类啊,线性。查找是吧,比较简单,二分法查找是吧。OK啊行,这两个就不多说了啊,这个呢,这个记着它有一个大前提就好了。数组得有序是吧。啊,有序无序的话呢,你用不了啊,哎,再下来下面一类问题,就数组的一个排序了啊。哎,很多时候排序的目的呢,是为了查找。
24:02
呃,因为你可以用二分法啊,然后排序这块呢,我们需要重点关注的就是第一个冒泡排序。啊,这个需要回血,然后快速排序。啊,这个呢是最简单,这个呢是我们最常用啊。啊,最简单就是好歹你得会写一个是诶这个意思啊,这样呢,猫排序跟这个我们还有这个叫呃,直接选择排序,这个我在课后这块呢,也都有啊,咱们这个第一章啊,第一个零一里边的数组。哎,排序算法,哎这个里边的,哎,直接选择排序。哎,这呢叫选择排序啊,其实它也挺简单的啊,跟这个冒泡呢,其实差不太多。啊,差不太多了啊,当然这块呢,就是呃,你好歹有一个就行啊。好,这我们就不多去讲这个问题了。这个再拉回来啊。好这个呢就过了,然后呢,呃,下边这块呢,关于数组的这个工具类的这个使用哈,这个就比较简单,大家就稍微的下来练习练习就行啊,诶就熟悉一下。
25:05
啊,内部的。哎,常用的几个方法就可以了。啊,你比如说我们提到这个斯顿。哎,后边这块呢,大家你就没必要呢,自己再去写for循环遍历了,直接调研储存就行。再一个呢,它是有个扫的方法。直接就排好序了是吧?哎,如果你在这个程序当中啊,需要有必要去找某个元素在不在了。啊,Bary是吧。哎,直接调它就行,但是你记着啊,调它之前呢。你得看他有没有去啊,还没去,那你接着排个序,哎就行啊行,常见异常这块啊,就两个啊。Death啊。Out of。啊,Exception啊。这个控制针。On poer。嗯,Exception哎,这两个哈,诶这两个话呢,大家也知道呢,它在什么样的场景下会出现,一旦呢,你出现了啊,你知道呢,我怎么去把这两个异常给他解决掉是吧?哎,不让它角标越界,不让它控制针,哎就可以了。
26:09
啊,所以我们讲它的意义呢,不是让大家写代码,你一起来一个这个,而是让你避开它啊。好,那么接着我们来看一看这个企业的这个真题啊。讲这题呢,这都比较老了啊,换句话说呢,就比较经典啊。哎,说数组有没有less这个方法。行吗?对数组没有less方法,它是一个。Last属性啊。所以没有小括号。这个啊说呢,String有没有less这个方法,这个咱们还没讲过。哎,先告诉大家啊,这个string呢,它是有这个length的方法的。哎,大家这会儿可能还有点儿迷糊了是吧,就是string的话,你比如我们这个叫hello是吧。它也有一个长度哈。这个长度是五。哎,就有几个字符的意思,哎,它这块呢,不是属性,哎一会儿就是我们讲到的string的时候呢,当然就知道了,它是一个方法。
27:05
看就可以了。他没有属性啊,所以这块呢,稍微得小心一点,其实这也没啥大不了,只不过他就是通过方法掉的而已啊。好,下一个若有数组,它然后用Java代码呢,哎,把这个元素呢,给它颠倒一下就是。翻转吗?是吧,哎,这个呢比较简单,咱就略了啊。哎,已经讲过了。下边说,为什么数组从零开始编号而不是一呢?对,我们说数组的索引。哎,索引是吧,哎,它呢,哎,其实表示了这个数组元素。哎,距离。这个手地址的,哎,天一亮。哎,那么继而的话呢,我们第一个元素呢,跟它的首地址就是一个地址了,所以偏移量就是零。哎,所以我们是从零开始的啊,因为。第一个元素,呃,它的这个地址与首地址啊相同。
28:01
哎,所以呢。哎,这个偏移量。嗯,所以。哎,偏一亮啊,就是零是吧,所以呢,我们就从零开始啊。嗯,比较简单说,下边说数组有什么排序,有什么排序的方式,手写一下。嗯,我我就冒泡是吧,然后你就手写一下,然后你自己这块呢,有堆排序,有七日排序,手写一下写不了,嗯,你对你就写这个,咱们常见的这个就行啊。呃,也就冒泡啊,然后呢,这个呃,快排这个事儿的话呢,等咱们讲完递归以后哈。诶方法以后,诶大家呢,就是里边就没有任何语法上的问题了,大家呢,就可以呢,自己来练一练了。啊,大家就,哎可以练习一下。而且呢,你练习了吧,我觉得你好久再不碰,八成了又会忘。就是写起来就不顺是吧?诶所以呢,如果你要从这个呃笔试面试的角度来看的话呢,这个呢,其实首先这个它的实现一种思想呢,大家还是要会的,这个一旦你会了以后呢,一般也忘不了,但是写的话呢,可能会忘,你可以到最时最后呃这个找工作之前呢,到时候再稍微的把这个呢写一写就可以了啊。
29:16
常见的排序算法啊,然后说一下排快排的过程,然后时间复杂度,那它这个呢,就不要求你去写了是吧,你说一下它的过程就OK了,咱们讲的讲这时候呢,也说过了,常见的这个大家就可以你讲一下课件是吧。他也不用呢,你把每一种都说一下啊,哎,快拍的过程,这个咱们就略了,时间复杂度说过了。啊,这个是Ron logn的是吧。OK啊。好,然后呢,下边二分算法实现数组的查找,这个咱们也讲过了。啊,记着提前排序啊。所以呢,你要自己在这儿让你写个代码,换你你自己造个数组,这个数组一定得是有趣的。哎,下边这块呢,我是放了一个算法题。
30:01
但是这块呢,我就不讲了。啊,这个题目的话呢,放在这儿了,诶这是携程的是吧,实际上最早的时候这道题啊,这个好多年前我就见过啊,实际上呢,是微软的一道题啊,后来呢,就是咱们国内的一些这个公司呢,就把这道题呢也拿过来用了。包括呢,好像有一年的这个一个大学的考试当中也用过这道题啊,浙大好像是啊。对,这个场景很多,这道题呢,也比较经典啊,哎,我就不刻意讲了,有兴趣的同学你下边看一看,我把代码都写出来了,它是这样的啊。说这个数组话呢,它有正的有负的,那所以呢,你可以呢,就提前假设呢,这个数组,比如就长这样啊,他现在你希望呢,找到这个数组里边的一个子数组。啊,你比如说这一个的这也算啊,两个这也算子数组,三个的话呢,就是这样,这都算子数组得连续得挨着啊,你不能说第一个第二个跟跟后边这个,这不算子数组啊,然后找这个子数组里边这个和最大的。这个子数组。哎,你最后呢,结果呢,你发现呢,就是这一段啊。
31:01
这一段呢,你计算一下它的这个和它是最大的,你前面你再拓展一个负二,它就变小了,在后边拓展负又会更小是吧。呃,然后呢,就让你去计算一下。哎,那么注意啊,这道题呢,经典就经典在它要求你的时间复杂度是on的。就是你可以呢,哎,便利一次,你可以再回来一次,你可以再回去一次,都行,这都是on。但是你不能出现for里边套for。是吧?拿错了。哦。呃十呃32,那这个应该是个正的。对,这应该是正的,对,而且写错了啊,这应该是正的啊,行,哎,说到哪了,就是它这个复杂度呢,是on的哈。哎,就是这块呢,你可以呢,这写这个for循环做了一个便利,你可以呢,并列的你再写个for这都行,包括序列再写个for,这都可以。你不能放里边套放。一旦你要套的话呢,这个复杂度肯定就不是欧文了。
32:02
你想对吧。哎,那你你要说低了这种套的话呢,基本上你就确定了,最好的也是N乘log n了。八成呢,你可能就整N方了。啊,后来你发现它两层搞不定三层的是吧,N的立方了,那就更不行了哈,所以这道题难就难在这儿啊,我就不具体讲了,大家有兴趣你下来看一看就行啊,好,这就过了。说排序方法有哪些,如何实现排序,这个咱们前面也都是不是反复的讲这个排序的事儿啊,就略了啊。好,这呢就是我们关于数独的整个呢,这个复习和企业真题啊,整个来看的话呢,这块主要集中在还是关于排序这一块啊。
我来说两句