00:00
完了不可变的列表,那接下来我们再来讲解一下可变列表,可变列表的话那就是list buffer,整体来讲跟A瑞buffer非常的相似,所以接下来我们直接来做一个测试,新建一个SKY的object test05,我们要测试的是list buffer方法先写出来,那首先我们还是先来创建。可变列表,首先我们定义一个一又一个,这里大家会发现它既然跟瑞buffer很相似嘛,所以这里边我们把它引入之后,GALA collection multipleable.list buffer,它本身呢,也是一个final class啊,那那当然这个跟list就不一样了,我们直接可以基于它的构造器去创建一个list buffer,我们这里可以直接指定它的泛型是硬接创建,那这里边一开始没有任何的元素,如果我们把它的类型完整的写出来的话,当然就是list buffer in。
01:14
啊,这是一种方式,当然了,另外一种方式也不例外,那就是直接利用它的诞生对象,直接传入一些对应的数据,实现这样的一个功能,啊是呃,非常熟悉的两种做法了啊,跟前面讲解的基本上没什么区别,跟。这八份是完全一样,好,我们运行一下,看一看当前的效果怎么样。看到例4BUFFER,这是空的啊,第一个创建的是没有任何元素的,后边这个呢,初始就有三个元素啊,所以我们可能大家如果对于Java的这个语法熟悉的话,可能更适应喜欢这个直接new一个东西这样的一种写法,但其实scla里边的语法是推荐大家直接用半生对象去做创建啊,这是创建。
02:15
可变列表的过程,然后接下来我们再看第二部分,我们就来讲直接讲集合当中添加元素的过程啊,添加元素之前我们既然已经有了经验,那对于可变的集合类型而言,我们就直接调用。英文名称的那些方法啊,就整体来讲应该会更加的方便一点,语义更加的明确一点,那之前list里面有很多方法可以调用,我们现在其实也是一样,你看list一看可以调用方法啊,方法也是比多个对吧,所以这里边我们随便给几个十五六十二,就是添加了两个元素进来。
03:02
那同样二我们这里可以直接prepared啊prepared那就是在前边去做一个添加,呃,比方说我们直接添加一个20,同样LIST1也可以直接去做一个insert insert的话那就是指定位置去做添加,刚说我们现在是指定一位置,然后而且添加可以添加多个嘛,所以我们这里比方说呃,十九二十二。到这一步,我们可以看一看例一和例二的,我看是什么样的。我们看例四一现在里边有四个元素,那是因为一开始是十五六十二,后边呢又在一的位置,也就是15后边15是第零个嘛,15后边加入了19和22啊,那大家看到就是这样的四个元素,而例子二呢,之前是三个元素,我们在最前边加了一个20,所以也是四个元素。
04:10
这就是当前我们添加的这个过程啊,那其实除了这种用法呢,另外还有一个可能大家会觉得比较熟悉的用法,就是甲等于啊,在有一些场景里边可能加等于大家会觉得更加的简单啊,更加的舒服,那比方说像这个例四一,我可以直接在后边加等于。一个25,而且大家知道这个是可以直接连续做处理的,因为目前一次调用后得到的还是一个list,那list后面还可以加啊,那所以前面可以继续再加,加一个11啊,然后这里就涉及到我们还可以前面加对不对,比方说前面加一个N11。那如果在前面加的话,那就需要R等于冒号啊,那后面我们再来一个16,它等于冒号,例子一政治我们就想到了,还可以。
05:10
直接把这些所有的合在一起,不也是一样的吗?这就把这个例子一相当于前边加两个,后边加两个啊,我们现在可以再做一个打印,看一看胸前的LIST1又变成了一个什么效果。确实跟我们想象的一样,之前的四个数据放在中间,前面加两个,后面加两个,按照我们定义的顺序就可以把它显示出来了啊,所以有时候可能用这种方法也还是比较方便的啊,这就看大家能不能。记住对应的这些符号到底是怎么样的一个操作,大家只要记住一个冒号结尾的这种符号方法,那它的结合顺序是从右到左啊,如果不是那个点方法调用的话,点的话当然永远都是对象点,然后去传参对吧,加上方法名传参,而如果要是空格的这种调用的话,编译器自动会判断,如果是冒号在末尾,那就是从右到左去调它。
06:13
啊,这是添加元素的这种操作。那后面我们还可以想象到。如果我们想要合并,就说连接两个list的话,操作应该跟之前应该也类似啊,但是之前我们的操作是当前我们这个,呃,List里边的操作是直接用了这个双冒号,这双冒号它本身就是一种list,本身是那个子类嘛,所以这里边LIST4BUFFER肯定跟它不同,那LIST4BUFFER又应该怎么样去连接呢?呃,这个其实非常简单啊,直接用一个加加操作,不可以连接一和例二,哎,那这里面大家可能会想到,到底这个改变的是谁呢?我们自然想到了这个加加符号,那应该是,哎,这里边我们其实是一个方法调用,那自然是谁调就应该改谁,但是大家仔细点到源码里边,你会发现它是做了一个CE。
07:20
就把当前的这一个集合类型啊,列表复制了一份,然后再去做操作,那显然我们这里边返回的肯定是一个新的列表对象了,哎,所以当前这个加加啊,它的底层真正能够改变的是什么呢?是这个come之后的这个对象。所以真正改变的这个方法调用,其实应该是这里的方法调用就是加加等于啊,所以大家看到就是加加它会创建一个新的缓存,然后加加等于的话,这样就相当于会直接覆盖就可以更改这个值了啊,那还是这样一个问题,就是我们如果要是定义一个LIST3的话。
08:08
他才是合并了LIST1LIST2的对应的这个结果,而LIST1LIST2做了加加操作之后,他俩并不更改。我们可以print line list1 list2。我们还是在这儿啊,先把它写出来,然后另外我们要测试的自然就是当前的大家,等于如果用这样的一个方法去连接例四一和例四二的话,那显然接下来咱俩就都大家知道这个例四二应该不改变,这例子一应该就有显著的变化了。我们把上边也分割开。看一下当前的效果怎么样。我们看到上边这是LIST1和LIST2,它们都是之前的值完全没有变化,而下边的呢,LIST1就在后边啊,这就是加加等于嘛,它掉自然就是在它后边去加上LIST2,所以追加了四个元素,而LIST2自己本身是不变的。
09:18
那当然如果说你想要在前边做一个,就是如果要是反过来啊,LIST2要去要去追加这个LIST1的话,我们也可以怎么样呢?用这样的一个方式,这样的方式,那就相当于是LIST2调这个方法,因为它结合顺序是从右到左吗?但是大家要注意,就是最后得到的效果是LIST2改变,而LIST1是不变的,我们可以运行一下看看结果。我们看到现在LIST1还是上边的八个数,而LIST2变得很长,那同样还是LIST1在前,List在二后,把它们连接在了一起,合并到了一起。
10:01
啊,这是关于合并两个列表的语法啊,那另外还有一些就是关于不说我们这个,但是可变列表嘛,那肯定现在应该就可以修改元素了,之前我们不可变里面能修改,那现在可以吗?我们看一下,比如说现在例四三。我们直接可以把中间的某一个值去做一个更新,然后我们看这个LIST2吧,LIST3离得有点远啊,我们里边输出的是例四二,我们直接把例四二的D,所以位置为三的元素改成三十来例四二。啊,大家可以看到当前第四个元素就改成了30啊,所以这个是完全没有问题的,那它的底层其实是什么呢?其实就是掉了一个来看到有一个倍的方法,对吧?啊,其实就是这样的一个方法,比说我们调一个零八十九啊,那就相当于第一个数改成了89,宁确我们也会看到。
11:19
当前这一种方法相当于它有一个简写,跟AR瑞array buffer那边的写法一样啊,就相当于是直接做了这样一个赋值计算,就调用的底层调用就是update,这是关于修改元素的一个写法,那另外对应的应该还有删除元素。二数元素的话,之前也非常的类似,则二我们可以直接remove某一个位置,比方说remove合影位置为二的,也就是三个数,当前这个应该是15啊,可以做这样的一个处理,那另外呢,还可以指定删除哪个元素的值,比方说例四二,那删除这个用的就是减,等于我们里边有一个25,那我直接可以把这个二十五一个删除来142。
12:15
你看效果,是不是把前的三个数和25都删掉了,我们看到之前的第三个数十五没有了,那后面的25也被删掉了。这就是关于可变列表里边的所有操作。
我来说两句