00:00
完了不可变数组,那接下来我们再来介绍一下可变数组SC拉当中的可变数组,我们知道其实就是array buffer,呃,跟这个AR瑞名称是不一样的,它是完完全不同的两个类,而且在类型系统里面我们也知道AR瑞前我们介绍这个不可变数组A瑞,其实为了跟阿兼容,它并没有归到直接从继承关系上属于stla当中的集合类型,而是通过底层的影视转换,相当于变成了一个S,变成了一个序列。而对于A瑞buffer而言,可变的数组类型而言,它本身不既是index的S,又是buffer,所以它本身就是一个S序列类型啊。那这里的index s和buffer呢?是它的两个特征,要做一个混入。那从功能使用上来看,A瑞buffer和AR瑞最大的区别当然就是它是可变的,如果我们要想添加一个元素进来的话。
01:00
啊,那ARRA要像添加元素,它会必须要创建一个新的数组对象,然后给到另外一个一个对象引用里边,这样的话我们就可以得到新的数组了,而对于瑞buffer呢,不需要,不需要创建新的对象,自己直接就可以改变啊,接下来我们就在代码里边去做一个具体的测试,我们还是新建一个。的object单列对象TEST0,二,我们要测的是可变的数组,其实就是a ber啊,所以我们直接就叫做S的buffer。首先第一步还是创建一个可变不足前面的AR瑞类似buffer在创建的时候呢,也有两种方式,一种方式是我们最为熟悉的,直接去new一个离对象出来啊,那当前是调用瑞buffer的对应的导器了啊,那目前瑞buffer我们需要去做一个导包importt进来,gala.collection.muable.a buffer,注意这里是可变的啊,那当然了,前面我们做这个array处理的时候,并没有直接把它引入啊,没有这样的操作啊,那是因为A瑞本身底层有对应的影视转换吧,所以这里边我们并不需要做对应的操作,而且本身main方法这里边我们默认就需要用到A瑞啊,所以这里边处理还是不太一样的啊,跟Java兼容的,那接下来我们看呃A瑞。
02:39
Buffer在定义的过程当中,我们这里就不需要再去传一个具体的个数了,而这里边呢,我们看到甚至连当前的泛型都可以不传,那如果不传的话,默认泛型肯定是安妮了啊,那这里进去我们会看到当前如果传参数的话,其实调用的是辅助构造方法,主构造器里边呢,其实是有参数的。
03:04
所以这里我们就看到了主构造器里边的参数叫做initial size初始的大小,哎,那这里如果我们要是一开始不传参的话,默认肯定就是里边当前是一个空的数组,什么数据都没有嘛,但是当前要不要给他分配内存呢?诶,是需要的,我们这里面相当于是默认给了一个大小是16的这样的一个空间。然后接下来我们在呃处理的时候呢,为了确定里边的数据类型,我们还是给一个泛型,那就在buffer后边带一个中括号int那里,里边我们也可以完的写出之前A1的类型,那就是a buffer in。除了这种写法之外,另外还有第二种写法跟瑞也非常的相似,那就是可以使用它的生对象,半生对象在定义的过程当中也是大家会看到直接把我们对应想要物理的数传进去就完事了啊,随便给几个数。
04:12
看到这三个数就变成了我当前可变数组的初始值,然后如果接下来要想再追加,要想再改变的话,那基于这个去做改变就可以了啊,这里我们可以直接一个打印输出,Print line1makeri,这里边要说的是我们这里直接给一个符号做分割,这里需要给大家介绍的是可以像前面A瑞一样,R make克逊方法,然后用一个分割符把它分开去打赢输出也可以直接。啊,这个做一个打印输出,我们来看一下啊,得到的效果是什么。
05:00
诶,大家看到前面这一个mix string其实没有任何的效果,因为本身A瑞一没有任何元素,所以它输出是空的,大家看这里边其实就啥都没有对吧?那甚至连一个空的a buffer都没有输出啊,直接就是空空了一行,而A瑞二呢,这里边输出的就是A瑞buffer 23 57 92,所以大家看到这并没有像我们想象的那样。它本身是个引用类型啊,引用类型如果在这里边直接to string的话,我们难道不是直接打印出它的那个引用地址吗?啊,比方说像之前。我们在这个array里边,你如果想要直接打印,我们直接打印目前AR瑞的话,那一定得到的是一个。是一个地址啊,这个大家是肯定能够想到的,那现在为什么他就可以可以做到直接呃,能够输出这样的一个可视的,非常能够看清楚是怎么回事的一个,呃。
06:01
当前的一个表示呢,哎,这主要是因为相当于我们这里默认调的是它的to string方法,而to string方法我们会看到啊,呃,就是当前。Di like调的是t like的toth string方法,哎,这是我们之前说的这个super指定它的想要调用哪个混入的特征的对应的to润方法,而这里边的to润方法呢,我们就看到了,是要把当前的里面加一个前缀,那前缀是什么呢?诶,那肯定就跟我们当前的这个类类型有关了,对吧?大家看下面,这就是处理这个前缀的一个方法,而后边呢,加上小括号,中间要做一个逗号的分割,这就是做了这样的一个操作。那当前为什么我们这个AR瑞Y不能这么做呢?AR瑞不也是通过影视转换可以转换成对应的这个c like,或者是像我们底层的这个e like之类的东西吗?啊,那关键就在于本身这里的array。前面我们讲到的这个array。
07:02
它直接继承的是Java啊,A relizable和cable,那所以当前如果要是AR瑞直接去处理的话,它可以作为一个object Java的object去调用它的to string方法。所以如果当前就有突斯string方法的话,自然不会找影视转换的to string方法了,那直接输出,输出的就是引用地址啊啊,这个给大家稍微的做一个解释啊呃,那当前我们就之后,然后是在当前skyla类型系里的啊,我们直接printline把这个集合做一个打印就完了,也不需要去变历了,所以这个看起来就非常的简洁。
我来说两句