00:00
我们已经了解了怎么样在数组当中去访问某一个元素,而且我们也知道了怎么样去遍历数组中的所有元素,那接下来我们要介绍的呢,是怎么样去向数组当中添加元。有同学可能就会疑惑了啊,之前不是说可变数组不能添加元素吗?我们这里说的呢,并不是要在当前数组上面直接改变这个数组,而是说添加元素之后,我们再把它作为一个新的数组返回,这样的话,其实得到一个新的数组相当于也是实现了我们这样一个功能啊。所以大家看所谓的不可变数组并不是说就不能改变,而是说本身它自己自身是不变的,我们可以把它做改变之后返回一个新的数组,然后你再对新的数组做操作不就完了吗?基于这样的思路,其实我们就可以实现更多的功能。所以呃,有同学可能会觉得,是不是一般情况下我们不要用不可变的数组,而是要用可变数组更加灵活,更加方便呢?啊,其实在skyla当中啊,更加推荐大家使用的是不可变数组,就大多数情况下大家会发现啊,我们对于这一个集合类型,它原始的。
01:17
数据可能是不想去改动它的,但是呢,我们可以经针对它进行转换,进行操作,得到新的集合,然后再返回,这是完全可以做到的。特别是我们在大数据做处理的过程当中,可能往往更多的是这样一种场景啊,那接下来我们就看看怎么样在一个不可变数组的基础上添加元素,那简单来讲,呃,也非常的明确啊,就是调用一个方法,这个方法叫做把这个先写出来做。冒号啊,看到这个方法很奇怪对吧?呃,就是直接这么写出来之后,你会发现当前这个idea里边还没有自动补全,都找不到,但是你如果把后边的这个括号写出来的话,他就找到了,那这里边我们要传什么呢?
02:07
我们点进去看一下,调的其实是OS的一个方法啊,那自然我们就知道为什么ID找不到,这显然也是要做底层的影视转换的,转换过来之后才能调这个方法,这里边传的数据呢,就是参数,就是一个element,那自然就是你要追加元素嘛,那肯定就是要加,要加哪个哪个数,我们就把这个数传进去。比方说这里我们传一个啊第13。那接下来底层他会怎么做操作呢?非常简单,首先获取当前的长度,然后我们看又了一个新的数组,拗了一个A瑞Y,它的长度是当前长度加一,哎,所以我们并没有直接去改变原先的数组,而是。又了一个新的数组,然后把当前的element作为最后一个元素赋值赋进去啊,大家看前面之前的那些元素,当然就是直接copy了,都copy过来,然后把最后一个位置填上我们追加的这个元素,最后把这个result返回就可以了啊,这个过程其实也是非常的清晰,非常的简单。
03:16
啊,那他可能会想,我这么参加之后,那就已经有了这个听的数组了吗?如果说我们直接按照之前的这个过程把它做一个打印输出,能看到了吗?啊,我们为了看的更清晰,把上面还是做一个分割线。直接这么运行的话,其实我们会发现A2肯定不变,因为前面说了不可变数组长度当然是不能变的,那这里的关键在于它调用之后返回的是一个新的数组,那所以我们如果想看到结果的话,那应该要定义一个UA瑞接收它的这一个结果,这样的话就应该可以看到最终的最终增加了一个73之后的结果了,我们把这里打引入出来,看一下到底是不是这样。
04:06
我们看到在之前五个数的基础上,后边又加了一个73,这就是把一个数据添加到。不可变数组里边的方法啊,那前提是我们要返回一个新的数组,那有同学可能会想到了,那照这么说的话,我们添加元素难道就只能往。最后面去添加吗?啊,其实也不尽然,我们也可以往最前面添加,那最前面添加的方法又是什么呢?啊,这个方法叫做同样我们也得返回一个新的数组,我们NEW2啊,把它定义成我们直接基于前面的new瑞做一个添加,一个方法叫做加冒号,看起来也有点奇怪,对吧?啊,前面我们这个叫做冒号加加号在后边它表示的是。我们要。把这个添加的新的数据追加到末尾。
05:01
而如果反过来加号在前面的话,我们表示的是把要传入的这个参数,这个数据要添加到最前面去,比方说我们给一个30啊,那接下来我们看一下。还是make把它分开啊,印一下。我们就可以看到当前的new array2前面又多加了一个30。这就是我们在前在后两端数组两端去添加元素的过程,那有同学可能会发现呀,这样一个方法,这看起来好像呃,不是那么的明确呀,当前这个调用冒号加加冒号那容易搞混,记不住,那怎么办呢?诶这里边有一个SC里边啊,为了避免大家出现。不必要的这种错误啊,搞混,那它有一个非常方便的语法,那就是。回忆一下,之前我们考察这个运算符本质的时候,我们说底层都是方法调用嘛,所以在SC拉当中,点号的这种方法调用是可以直接去掉点号,用空格分开就可以了,然后后边如果只有一个参数,也可以去掉小括号,空格分开,哎,所以之前我们说那个运算符就直接写成了空一格,然后写加号,写乘号这样的一个方式,那现在我们既然也是一个方法调用,那是不是也可以把这个当成一个运算符,那么来那么来做操作呢?哎,其实是可以的啊,里边比方说我们再定一个new瑞三,如果我基于之前的new瑞二,后边还想去添加一个。
06:41
应的数据的话怎么样呢?直接空格冒号加,然后加一个15看,这样是完全可以的。啊啊,那有同学可能就想到了,那如果要是这样的话,我再拗一个瑞四,如果我想要基于这个NEW2瑞三在它前边去加一个数的话,是不是就是这样呢?加冒号,然后比方说随便给一个29,是不是这样呢?诶大家看不是这么做。
07:11
所以大家要注意一下啊啊,因为如果你直接这么去写的话,那其实跟我们前面这个还是一样,你还得记顺序啊,所以盖拉底层有这样的一个规则,就是如果要是省略点号,把这个方法调用直接改成空格的这种这种写法的话,那这里边我们的方法名称,如果里边还有冒号,如果是以冒号结尾的话。那当前方法调用的结合顺序。将不是前边是对象,后边是参数,而是变成了从右到左,右边是对象,左边是参数。所以当前如果我们要这么写的话,那就必须写成什么呢?啊,那就得写成29在前。当前的数组对象后就对了。
08:03
所以大家看,如果要是这样一个语法规则的话,那我们肯定不会写错了啊,就是这个只能写在后边啊,那他写在后边的话,当前这个15当然就是加在后边了,29只能写在前边啊,那这样的话,那我们就相当于肯定就是往前面去追加了,所以这还有一个好处是什么呢?就比方说我们想要直接追加很多个数据的时候。我就直接可以比方说前面我再追加一个。乘九大,看我就可以直接在这儿。连续叠加,因为大家知道之前的这个追加税顺序是从右到左嘛,所以基于右边这个对象这个数组,我先在前面添加一个元素,得到还是一个数组啊,这个数组再去添加一个元素,还是最左边添加一个元素,又得到一个新的数组,哎,所以就可以连续添加,甚至我还可以后边也去做添加。
09:02
20哦,大家注意这个是冒号加对吧,刚才是朝后结合哦,后边去添加元素是完全可以做到的,也可以添加多个冒号加第十,嗯,完全可以做到,所以接下来我们再把这个打印一下PRINTLINE64,我们看看是不是能实现我们想要的效果。大家看到哦,这里边我们应该是点mix string啊。我们直接啊,就用逗号分割可以了。你看它的效果是什么样的,我们看到就是前边在这个俄瑞三的基础上啊,瑞三应该是。这些数后边加了一个15,二瑞二加了一个15,啊,那么二瑞四就是在它基础上前边加了19 29,后边加了26 73,这不就是按照我们这个定义的顺序写出来的吗?哎,所以skyla的语法给大家的方便就在于可以完全不出错,非常的简单易懂,你一看到就知道我想要一个什么样的数组。
10:11
这就是关于不可变数组的。各种调用的方法,各种要做的操作。
我来说两句