00:00
创建好了数组,那接下来我们就应该可以对数组做一些操作了,一般情况我们能对一个集合类型做什么操作呢?不外乎就是增删改查嘛啊,那所以当前我们既然是一个不可变数组,那我们可能会想到增删改可能会有点难,那查询是不是可以做呢?一定可以做,所以接下来我们就做一个查询数据,或者叫访问数组中的元素,那访问元素的方法其实非常简单,前面我们看到啊,在这一个。生对象的apply方法里边版码的处理过程其实已经给我们展示的非常明确了,怎么样访问一个数组,数组里边某一个位置的值呢?呃,我们看其实就是直接当前的数组名称后边加一个小括号里边里边一个零,那我们自然想到这不就是索引值吗?哎,所以把当前的索引位置传进来,这就可以访问到对应的零位置上的元素了,哎,我们这就是相当于给第一个位置的值赋值嘛,我们这里边X不就是传进来的第一个数嘛,所以就赋给A瑞零,那那在Java里边我们是用这个中括号去表示的啊,在skyla里边,我们这里边是小括号,然后后边,呃,你看到这个A瑞I,这同样也是啊,第个位置的值直接赋值,其实这里大家发现了,不光可以直接访问到我们这里,其实还能直接赋值对不对?
01:33
哎,那相当于就是这里边不光是能做查询,还能修改啊,那有同学可能就会觉得有点奇怪,不,不是说好的我们当前是不可变的数组吗?怎么这里边又可以去更改里边的值了呢?这里给大家解释一下,当前所谓的不可变数组,它其实指的是我们当前的数组,其实是一个引用类型啊,Skyla里面的集合类型都属于引用类型嘛,那对于这个引用类型而言,它其实并不关心指向的那个对象里边的内容就是我们存放的值到底是什么,其实并不关心啊,这个大家是知道的,对吧?所以我们关心的是什么呢?关心的就是当前指向的对象,那我们当前的对象不能更改,那其实就代表首先。
02:22
当前的这一个,呃,对象存放的地址不能更改,然后另外就是对象的大小,占据的内存空间肯定也不能改,所以如果要想插入数据删除数据的话,对于不可变集合来讲肯定是做不到的,但是我们如果要想改变某个位置上的值的话,当然是可以做到的啊,所以它其实还是引用类型的这种处理方式,所以我们自然就能想到了,一开始我们在创建数组的时候,直接拗了一个AT5,没有给所有。每一个位置上的值到底是什么,我们根本没给,所以我们想到了默认是什么呢?默认是零嘛,它跟Java兼容,Java里边我们直接创建一个数组出来之后也是默认值是零嘛,所以当前如果说我们要不能修改的话,那你创建这个数组有什么用呢?
03:14
啊,所以自然是可以更改值的啊,所以接下来我们就来访问一下元素,然后再修改一下值,看看效果怎么样吧。呃,首先自然想到了这个访问元素的时候非常简单啊,直接A瑞,比方说我们给一个一啊,那大家知道这索引位置当然从零开始了,然后给一个一,那接下来我们可以跳过几个访问一个四肯定是可以的,那如果要是说想要访问五的话啊,那肯定直接运行就会。贸异常对吧?呃,当前编译肯定没有问题,但是你运行的话一定会数组越界啊,所以大家一定要注意,访问数组元素的时候能超出它的索引范围,是访问元素我们看到得到的都是零,这是没有问题的,初初始值是零,那接下来我们就来做一个负值了,我们看到赋值的时候也是按照否我问元素的这种方式啊,你出来之后,然后直接在后边写一个啊,当前的值到底是多少,写一个就可以了。
04:20
A22,我们直接给四做一个负值。57,然后接下来我们再把这三个值做一个打印好,所以就看起来就会非常的直观啊,我们可以看到更新之后,十二零五十七,那关于这个底层的实现,有同学可能会有点疑惑啊,就是这里边难道这就是一种特殊的语法定义吗?为什么它是一个小括号,看起来就像一个方法调用一样呢?这里我们可以给大家解释一下,在array本身底层的源码里边,其实我们可以看到这个AR瑞类里边,它有几个特殊的方法,一个叫做apply啊,大家看就是这个arra里边也有一个apply,这个跟伴生对象的apply方法还不太一样,它是当前这个类的apply方法。
05:16
那这个apply方法代表什么含义呢?就是表示对当前的。对当前的这个数组对象做一个。做一个处理,做一个访问的调用,那这里边传的当然就是I,这是一个索引位置了,哎,大家看这是直接throw new error,这这是啥意思呢?难道直接抛异常了吗?哎,这不是这样的啊,这是当前这个代码块,当前其实只是占了一个位置,它具体的代码块呢,是在运行的时候。才由编译器去直接做填入的啊,所以有时候会把这个叫做呃,就是所谓的这个存根方法对吧?呃就是叫做tu method,有时候会做这样的一个处理,那这里对于这个apply方法,我们看注释其实可以看的比较明确,就是对于apply方法,它有一种比较方便的简单的这种访问方式,就是可以直接用,比方说XSXS这里是一个数组啊,Xsi直接加小括号I,它就是一个烧碳的一个简写。
06:22
对于XS调apply方法的时候是一个简写啊,所以我们如果要是说直接写这个,像我们这里啊,直接零表示什么呢?其实就是ara.apply。零对吧,其实就是这样的一个调用,但我们这里边直接这么调是不对的,因为就是在这个当前的这个skyla里边,本身我们这里边是看不到它对应的这个实线的啊,所以你直接这么调是调不出来,但是编译器编译的时候会给我们把对应的这个方法填进去的话,我们就可以直接掉了。那另外大家看还看到了,下面对应的还有另外一个方法叫做update,这个update呢传两个参数,一个是当前的索引位置I,另外一个就是。
07:12
当前的数据类型的X,那表示了什么?Update我们知道这不就是更新吗?就更改某一个值吗?啊,同样我们看到这也是一个存根方法,没有具体的实现,是编译器来处理的,那这里边我们看到它也同样啊,注释里边写出来了,如果我们用这样的语法直接XS小括号I等于X的话,那我们就直接可以用更,呃,就直接就代表了什么含义呢?就代表的是XS掉它的点update传I和X进来做这样一个更新,对于I位置上的元素更新成X的这样一个操作。啊,所以这个语法就看起来非常的简洁啊,大家也可以认为这是有一种特殊的定义啊,因为是底层编译器要给我们做这些事情的。
08:01
这就是关于访问元素和修改元素的这样一个过程。
我来说两句