00:01
行了,那么接下来呢,我们来看一看啊,就是数组。呃,数组的优点,或者数组在内存方面存储的时候啊,内存地址是连续的。或者说叫数组中的元素啊,数组中的元素内存地址是连续的。各位啊,什么意思?有同学说什么叫连续的,大家看啊。如果说你数组里边存元素的是这种情况,什么情况,就是这有一个。怎么着啊,哎,这有一个。哎,这有一个。这有一个,如果你是采用这种方式,就表示空间地址不是连续的,明白吗?但数组这个东西,它存储元素的时候,它的每一个元素在内存存储方面啊,它的空间上,它的内存地址是连续的状态。
01:02
是紧挨着的,是规则的啊,这件事我要跟大家提一提啊,说一说就是数组在内存方面存储的时候啊,数组中元素内存地址是连续的。就是存储的每一个元素都是有规则的,挨着排列的。啊,内存地址连续。内存地址连续,这是数组的啊,这是数组存储元素的特点啊,或者叫特色。数组是一种什么呀?数据结构各位啊,数组实际上是一种什么呀?哎,数据结构是一种简单的数据结构,大家还记不记得我们这个之前,呃,在给大家讲前面那个叫做站的时候,哎,我们提过叫数据结构和算法是一个程序员怎么着啊,必修的一个课程是不是,哎,但是呢,我们Java语言当中大部分对我们数组都都怎么着都进行了啊这个。
02:16
对我们数据结构和算法都进行了封装,所以呢,我们就不需要太怎么去学这个数据结构和算法,但是我们在Java当中接触的第一个数据结构是谁呢?哎,大家注意啊,接触第一个数据结构就是我们的一个数组。数组中存储的元素,这个元素在内存方面,它的空间方面,它的内存地址是连续状态。明白吧,啊什么意思,这个100放到里边了吧,五是不是放到这儿了,那么这个100所在这个框这个框这有没有内存地址啊各位。这个框上有没有内存,比如0X11。来给我一个回复,各位。来,那么紧接着这个可能就是什么呀,就是0X12呗。对吧,就这个方框啊,这个方框的内存地址是连续的,来我往下一点看。
03:05
啊,这个这个这个23存在存在这个位置,这个位置它也有一个什么呀,叫0X13啊,可以这样去理解。我再说一下啊,数组中存储的每一个元素在空间存储上是紧挨着的,一个挨一个,一个挨一个,内存地址是什么?连续的一个状态是排的。就是我后边是你,你后边是他,他后边是他,就这意思,空间存储内存地连续这个0X11是谁的,是这个小方框啊来我再我再我再标一下各位啊,是这个小方框,就这个小方框,它的它的内存地址。是0X11,后边这个小方框对吧,空间想象能力啊,后边这个小方框,它的内存地址就是0X12。你懂什么意思吧?啊,那么大家注意啊,包括我们这个引用类型的这个数组里边存储数据对对象的地址的这种情况,它这边也有什么呀啊,内存地址,比如说第一个方框的内存地址0X22,那紧接着你这个位置的一个内存地址是什么呀?是0X23。
04:07
大家注意这个事儿啊,注意这个事儿。啊,不知道大家理解不理解啊,有老师怎么两个地址记住了,里边存的0X1234是你这个对象的地址,你这个0X1478是你这个对象在堆内存里边的地址,但是你这个0X1234和0X1478是不是存储在。这个小方框里啊各位。啊,是不是应该在这个小方框里啊,那么你这个小方框,你这个小方框就这个小方框,你这个小方框有没有内存地址,你的内存地址是0X2,而你这个小方框明白吧,在空间存储上,哎,它的内存地址是什么呀?是0X23,你这个方框和这个方框的内存地址是连续的。记住啊,我不是说0X1234和0X1478,那内存地址是连续的,我说的是你这个小方框和这个小方框的内存地址是连续。
05:07
明白吗?哎,而且我告诉大家,数组有个特点啊,数组一般会拿第一个小方框,它的内存地址作为整个数组的内存地址。来注意啊,来我我说了啊,这边所有的数组都是拿什么都是拿。第一个小方框啊,第一个小方框。的内存地址,都是拿第一个小方框的内存地址作为什么作为整个数组对象的内存地址?明白吧,你比如说你前面你可能有一个引用,对吧,这个引用呢,就叫什么呀,一。对吧。
06:00
呃,怎么说呢,100就没有内存地址了啊,100就在这个小方框里边。明白吧,啊,这个小方框里边存的这个数据0X1234,这个存储的这个0X1234是这个对象的内存地址,但这个100就是在里边存着的。都是在里边存五也是在这个小小方框里面存着的啊瑞一。等于什么呀?哎,0X11,那这个瑞一呢,它它是个引用,它这个引用指向人,指向的就是我们这个数组对象。啊,然后呢,这块呢,可能会有一个什么呀,叫做这个二位二啊,叫做0X22啊,这个0X22指向谁啊,哎,指向的就是哎这个数组对象。他会拿第一个小方框首元素叫首元素的内存地址作为整个数组对象的内存地址。啊,数组的内存地址就是第一个元素的内存地址,可以这样理解啊,可以这样理解,就是第一个元素的内存地址啊,那么这个呢,它的这个类型是什么类型呢?哎,我们可以看到它是个什么呀,Int类型的数组。
07:08
你看那么在这个地方,它的数组是什么数组呢?哎,它是一个person数组啊person。来,我往这稍微拖一下,稍微拖一下。啊,这是个int数组。这就表示说,你一里边存的都是int类型,而我位二里边存的都是person类型。啊,那么现在大家看一看这个焖方法,你能看懂了吗?实际上它是一个什么数组,并且是一个什么呀,字符串数组吧,哎,字符串数组。啊,也就是说在这里写上啊,数组中首元素的内存地址,作为整个数组对象的内存地址。
08:04
啊好,先把这个内存,先把这种数据结构给大家讲明白了啊,讲明白了来这个保存一下。保存一下啊,那么这个是一维数组,各位啊,这是一维数组,二维数组,到时候咱们再看好吧,啊再看,那么再往下我们来分析一下数组这种数据结构,它的优点和缺点是什么。比如说优点是什么,缺点是什么,大家思考一下,想想。另外这块呢,还有一个事儿啊,我没给没给大家提,在这里提一下,先提一下各位啊,数组中每一个元素它都有什么呀,下标。它都有下标啊,第一个元素的下标是什么呀,是零。各位啊,这个颜色呢,我给它改成。
09:00
绿色吧,下标啊,第二个元素啊,它的这个下标是一。啊,它有下标啊,有下标的概念,然后这个呢,哎是什么呀,是。二。这个呢?012这个是下边是三啊,这个是四下标啊,这个是。几啊五啊,然后这个第一个元素的下边是几啊,哎,零啊,第二个元素的下边是几啊哎。一。啊,数组中每个元素都是有下标的,在这补一个吧,各位数组中每一个元素都是有下标的。下标,下标。从零开始,以一递增。
10:03
最后一个元素的下标。是,是什么?是认识?减一。啊,最后一个元素的下标是Les减一,是你数组的整个这个长度减去一,你好好想想是不是这个道理,因为它的下标从零开始啊,对吧,下标非常重要啊,下标非常重要,因为我们。对数组中元素进行。存取。的时候。都需要通过下标来进行。啊,数组中每一个元素都是有下标的,下标从零开始以及递增,最后一个元素的下标是Les减一,Les是我们数组的长度嘛,长度减去依旧是最后一个元素的它的下标,啊,下标非常重要,因为什么呢?因为我们以后假如说我们要把这个100给它取出来,或者说我们把100给它改成111,或者说我们把这个对象对吧,我们把这个对象换成别的对象,比如说在这里我又创建了新的对象,我希望这个位置指向这个对象这个,那这个地方的这个地址就得变,对吧?哎,你想把这个位置的改一改,你想把它取出来,你都得通过下标,所以下标是非常重要的。
11:34
啊,特销一下来,特销销销。对,就是通过具体的下标取出某个元素。或者是修改某个元素啊,取出某个元素或修改某个元素啊,所以我这里呢,总结一句话,叫做存取的时候,一个是存,一个是取。对吧,你就像你你大家应该都去过超市啊,你去超市的时候,你手里拿了一些东西对吧?啊,你你他是不是超市不让你进啊,不让你进一般是不是有个存取柜啊。
12:05
有有柜子吗?你们超市你们见过见没见过那个那个嗯,就是专门寄件的一个柜子呀,就柜子上一格一格一格一格的,你你拿一个钥匙,然后一打开,然后把你随身携带的东西把放到那个柜子里边,对吧,等你走的时候怎么着啊,把那柜子一打开,然后把那东西拿走就行了,那个柜子其实就是一个数组。对不对,哎,一个硬币投一次你天还收费呢啊,看来你们这这个比较抠啊,你们这比较抠,我们都是免费的啊,北京都是免费的,对存取都是免费的啊,你说这你的你不免费对吧,还还靠这个发家致富是不是啊,行不说这个了啊,就是说数组啊,就长这个德行,每一个格它都有内存地址,每一个格都有内存地址,数组里边存储的这个数据可以是基本数据类型,数组里边存的也可以是一个对象的内存地址。但是数组本身什么意思,数组本身就这个东西,各位啊,它是个什么。
13:01
来我问了各位啊,你们要答的啊,来告诉我它属于整个这个东西,它属于什么类型。整个这个东西是属于什么类型,各位。这是个什么类型?引用数据类型?数组是一个引用数据类型,你不要看着上面有个int,记住了,你后面还有个中括号呢,你如果in后面加个中号,妥了,这就是一种类型的名字。明白吧,它和这个你比如说int I等于100是一个意思,100是什么?各位100是什么。啊,是的,数据I是啥?是个变量吧,好,这是个什么数据类型,是不是好,那我问你这个属于什么,属于基本数据类型对吗?是不是int是属于基本数据类型啊?哎,但是你要注意啊,这个位置。它是一个什么。对象的内存地址就是这个数组的内存地址。
14:02
明白吧,哎,数组数组对象的内存地址啊,就是堆数组对象的内存地址,堆中数组对象的内存地址。啊,来,我放到这。这是说谁呢?这是说。他。而你这个就是一个什么变量名,谁是变量名啊。就他。啊,它不是基本数据类型,只能说这个数组里边存的是基本数据类型,但它是个引用类型,但它整体印的中框是个什么呀,引用数据类型。引用数据类型,各位啊,它是个引用数据类型。它表示是一个数组,明白吧,后边有个中括号,中括号前面这个int就表示数组里面的元素类型是int。这个整体它也是一个什么引用。
15:03
数据类型。啊,引用数据类型里边的每一个元素也是用。它整体哎是一个什么呀,引用数据类型。啊,是这样的一个一个情况啊,一个情况,所以这个代码和这个代码你要能能看明白数据类型变量名值,数据类型变量名值,只不过这个值是我们这个数组对象的一个内存地址的,哎首呃,这个数组首元素的内存地址作为我们整个数组对象的内存地址啊是这样的一个关系啊,这样关系好,那么现在大家思考一个问题,为什么,为什么我们数组拿第一个元素它的内存地址作为我们整个数组对象的内存地址呢?为什么?你思考过这个问题吗?就为什么数组中首元素的内存地址作为整个数组对象的内存地址呢?
16:00
因为啊,数组在存储元素的时候,内存地址是连续的。对吧,他如果知道第一个元素的内存地址,是不是就可以算出第二个。知道第二个是不是就可以算出第三个,是不是可算出第四个,第五个,第六个,也就你只要知道第一个元素内存地址,后边的这些元素,它的内存地址是不是都可以通过数学表达式算出来呀。所以他可以拿受阻的第一个元素的内存地址,就可以作为你整个这个对象的一个,哎在堆内存地当中的一个内存地址,他就可以把你哎后边都可以算出来,所以他敢把第一个元素内存地址啊,作为你整个数组的一个,哎内存地址啊,数组对象内存地址,这要了解一下啊,了解一下,那么数组这种数据结构的优点是什么?就是查询或者叫查找啊,或者叫查找,或者叫检索某个啊下标上的元素时,效率极高,可以说是效率最高,可以说是查询效率最高的一个数据结构。
17:12
为什么?各位为什么检索效率高?第一。每一个元素的内存地址在空间存储上是连续的。第二,每一个元素类型相同,所以占用空间大小一样。第三知道首元素的内存地址对吧,知道第一个元素内存地址。对吧,知道每一个元素占用空间的大小,又知道什么下标,所以。
18:01
通过一个数学表达式就可以计算出。啊,计算出某个下标上元素的内存地址。直接通过内存地址定位元素。所以。数组的检索效率是最高的。什么意思?各位啊,注意听啊,你我问大家一个问题,你知不知道第一个元素的内存地址,因为你这个引用里边保存这个地址是不是就是第一个元素内存地址啊,好,我再问大家int类型占几个字节?来给个互动,各位int类型的数据占用几个字节。还记不记得be short in long flow double bulllin12484812 int类型是不是占四个字节?好,我问你是int类型,里边是不是都是in类型?对吧,那你这个占四个字节,这个是不是五也占四个字节,23是不是也占四个字节,那我问你第一个元素的内存地址,你知道吗?好,我问大家将来你在查找元素的时候,我们是不是通过下标去查。
19:11
是不是通过下标好从零开始到四中间隔了几个格?四减零是不是四啊,隔了四个格,一个格是几个字节,四个字节四四十六是不是差16个字节?那我问你第一个元素内存地址有,你再往后加16个字节,能不能算出你四这个下标这个位置上这个元素在空间存储上的一个内存地址啊?能不能算出来,能不能通过数据表达算出来可以吧,所以它可以很快的定位到这个元素通过内存地址定位的,而那个内存地址是算出来的,是算出来,所以我们大家一个数组里边存100个元素和一个数组里边存100万个元素,检索效率或者查询效率方面是不是一模一样,所耗费的时间是不是一样,因为它不会一个一个找,他不是说哎找找第一个,再找第二个,再找第三个,再找第四个,找第五个,找第六个,诶终于终于找到了,是不是,哎,他不是这样,他是通过数学表达式算出来的,各位啊,是算出来的这种数据结构。
20:04
啊。数组中储100个元素,或者存储1万个元素,在元素查询或者叫检索方面啊,叫检索方面。效率是相同的,因为数组中元素,数组中元素查找的时候不会一个一个找,是通过数学表达式计算出来的。明白吧,是通过一个数学表达式算出的内存地址,明白吧,是算出一个内存地址直接定位的。所以我问大家,将来试问大家数组的优点和缺点的时候。
21:03
这样的去描述出来,面试官经常问你啊,经常问为什么检索效率有分七八同学。说什么呀,因为数组啊,有下标,这个回答是不完美的,各位。如果你这么回答,你的工资可能就是6000块钱,5000块钱。明白吧,如果你按照杜老师的这种方式去回答,那么你的工资一下呢,就能上到1万以上。各位,这种东西啊,我觉得大家呢,一定要注意你说话的一种方式,人家问你数组为什么检索效率高,你告诉人速度,有速度里边元素有下标,那咋了,有下标就效率就高了,有下标这个东西就不是一个一条了,所以你没有输到点上,同学们啊,你一定要输到点上,怎么说?首先第一点你要跟人说清楚数组第一个元素内存地址,我们知道的,第二点数组上每个元素内存地址是连续的,第三点数组里边每个元素占的空间大小又是一样的。对吧,那么第四点你就知道下标,知道下标就知道偏移量,你知道偏移量通过第一个内存地址能不能算出来,你指定这个下标位置上的内存地址算出来,那这样的话,他直接通过数据表算一个,哎,拿到这个元素的啊,直接定位定位的,所以说没有一种数据结构可以比这个数组它的哎效率呃,查询效率,查找效率高了,各位啊,这个堪称是我们数据结构当中呢,老大什么老大,检索效率最高的一种数据结构。
22:27
这种数据结构啊,它呢。有这个优点对吧,那它必然会存在什么呀缺点,因为它不可能完美,因为一个东西啊,在某一个方面怎么着呢,它呃,它这个发挥的非常好,那么在另外一个方面,他可能就会发挥的很差啊。
我来说两句