粉丝5.2万获赞38.1万

今天我们来讲一下耳泪,我们不写代码,我们对耳泪这个类型的常用属性与方法进行一个分类整理,帮助我们大脑来记忆它,知道它有些什么样的功能。 而论类型呢,它是数组的一个鸡肋,它提供了数组的最基本的属性与方法。那我们首先来看一下它的属性 rank, 哎,这个是它的为数啊,注意它是从一开始的,比如说第一位,第二位,第三位。 认识属性呢,是 array 这个类型当中所有元素的总数,不是指某一维的啊,下方还提供了一个啊,更大的一个数组的长度,超过二十一亿的时候,可以用它 来获取。好,我们来看一下常用的方法。首先我们从数组的结构上整理了一个分类 啊,第一个是 resize, 通过这个方法,我们可以将一维数组的大小进行一个调整, 它会创建一个新的数组,将原先数组里面的数据复制到新的数组里面。如果新的数组空间比原先的小,那么它会丢弃超出了部分。如果我们经常更改数组的大小,那么我们应该使用 list, 因为它内部就是动态数组。下方这个方法的 create instance 就是创建数组实力, 在运行时,根据需要动态的创建任意类型,任意维度,任意大小的速度啊,非常的灵活。 下方的这个方法 get ins 就是获取长度,当然它是指某一为的长度,它有个参数就是我们的为数。注意,它跟我们的这个 rank 它有区别的, rank 它是从一开始的, 而我们的这里 get nice 呢,它的为数为,它是从零开始的,也就是说我们第一为其实它的缩影是零 下方这两个方法了,一个是获取某一围上的最小的下标,一个是获取最大的下标,因为我们有的数组他的最小下标并不一定是零, 比如我们用这个方法创建的数组,我们可以指定最小的下标。比如从 excel 里面一个区域里面获取的数组,他的下标就是从一开始的,比如说并不一定是零开始。通过这两个方法, 我们就可以灵活的获取某个数组真实的情况啊,进而对他进行一个处理啊。下面这个就是处理,就是设置值和获取值,当然我们可以通过中括号的形式,锁印的方式来处理。 哎,但是对于一些类型维度还要大小未知的情况下,我们使用这个方法来更加的方便。好,我们再来看一下对数组进行 一些整体上的操作的方法。 as the only, 它是将我们的数组包装一下,返回一个只读的集合,也就是说如果我数组不希望别人修改,那么我就使用这个方法返回一个集合,只读的你可以看,但是你不能改 啊,注意他不会复制数据,他仅仅是一个包装。如果我们通过某些方法修改了这个数据,那么这个包装里面的数据也会改变,因为他只有一份数据在内存里面。 clear 清除,注意这个清除和我们想象的可能有区别,我们并不是把数据清除掉,每 没有了,而是把数组的元素设置为他的默认值,我们也可以对指定范围内的元素进行一个处理。 feel 填充刚刚是清除,那这里这个填充呢,就刚好相反,我们是设置全部或者部分元素为某个指定的值。 clone 克隆也就是复制一个数组啊,但还是要提醒一下,它是前表复制啊,对于引用类型你要注意这一点。 copy 啊,同样的是复制啊,他比我们的克隆要灵活在哪里呢?他可以部分的,而且他可以把我们的元素复制到指定的位置,也就是他使用 用起来更加的灵活啊。在这里说明一下啊,就是我们这里有橙色线的啊,就是实力方法,没有橙色线的是静态方法。 好,讲了这个以后,我们再来讲一个便利处理,我们想想啊,数组它本身就是有很多很多元素,那它最核心的就是便利处理, 也并不说这里面的这几个方法才是真正的便利我们的整体操作,他其实内部都是有便利操作的, 甚至我们后面要讲的查找还有排序,他的内部都使用到便利,因为数组他就是这样一个结构吗?我们来看一下便利 有哪些方法啊?这个是获取一个媒体器, get in humiliter, 我们获取到这个媒体器以后,就可以对他进行一个便利操作。 当然呢,直接使用佛一起更简单啊。第二个佛一起啊,这个佛一起他是我们类类的一个静态方法,我们可以通过一条语句对整个数组里面元素进行个便利处理啊,他有个参数,是一个委托, 使用这个的话,我们可以将一个 fore 去语句变到一行里面来完成任务。下方这个方法呢,我们看字面意思哈,他就是说判断这个数组里面是否每个元素都满足某个条件啊?我们可以想象一下,比如我现在 是一个产品数组,然后我就是要判断是否这里面每个产品都满足合格,就是这样一个意思,他同样的提供了一个委托,这个委托就是判断的条件使用,他呢就比较方便,而不用写循环了。 下面这个方法呢? convert or 哎,它是一个类型转换,将我们的数组转换成另外一种数组类型。 哎,我把它放在了便利处理里面啊,因为我大概看了一下内部的代码,它其实就是一个循环,将每个元素都变成另外一种类型。 他又新建了一个要转换的类型的数组,然后把原先的数据每一个单独的转换以后,然后拷贝到我们的新的数组里面, 这样来完成新的类型啊。我放在这个便利处理里面,就是让大家能记住他,他是一个一个处理的。好,我们再来看一下查找功能的方法 啊,有点多啊,但是他们的功能都比较类似。首先是 exist 啊,显然就是确定满足条件的是否存在啊。注意一下,这里是满足条件,不是说相等, 我们可以是相等,也可以是其他的条件,我可以循环的便利,每个元素其中有一个满足这个条件,那么他就是处返回,就是否存在满足条件的,然后我们要给他一个委托, 这个委托他会判断返回一个布尔值。然后是我们的 find exist, 它是查是否存在,而 find 它是找到某个元素,然后返回给我们。同样的需要给一个委托, 这委托里面就是条件,我要查找,我要找什么样条件的元素,找到以后,他返回第一个满足条件的这个元素,如果找不到的话,他会返回一个该类型的默认值。 下面这一个呢,一样的,也是找,只是方向不一样,他是从后面往前面找,所以他返回的是最后一个满足条件的元素。第三个呢? final 啊,他是返回所有满足条件的这些元素,返回的是一个数组,下面的这两个呢,跟上面的差不多,同样的是给一个条件,然后他在我们的数组里面进行便利查找, 但是它返回的不是我们的元素,而是返回满足条件的元素的它的锁引,如果找不到,它是返回一个负一啊,这个也一样,这个是从后面查的时候,返回的是锁引。 index of 啊,这个也是同样查找,它返回的也是所引啊,区别在于哪里呢?跟上面的几个查找的区别是,它是用相等来判断,就说有没有与这个相等的元素, 如果有,找到以后,返回第一个满足条件的元素的下标啊,这个也一样,这个是从最后面开始查找匹配与我们指定的元素相等的元素,它的下标。好,我们再来看最后一个查找, battery search 啊,最开始我以为是二进制查找啊,这个不要错误的理解哈,他是二分查找啊,也叫折半查找 啊,他的效率非常高啊。但是使用这个查找,他的前提是需要我们的数组是一个有序的声序的,这样一个数组 找到以后,他返回的是匹配上的锁引啊。举个例子哈,我们假如有个十 十万个数据已经排好序的,如果使用普通的这种便利查找的话,那么平均要五万次才能找到,但是使用二分法的话,那么最多十七次就可以找到,这个效率是大大的提升了。 好,那么我们再来看一下排序的这个方法,两个啊, short, 它同样是静态方法,我们应该使用 already short, 然后指定数组它就可以排序了。 既然排序肯定有比较,那比较,哎,它使用的是元素,就是我们数组元素支持的比较器,也可以我们指定一个自定义的比较器,就是我们怎么样来比较这两个数据?指定不同的 比较方式啊,那么比较大小的结果就不一样,那么排序的方式也就不一样啊,下一个方法呀, reverse, 它就是一个逆序 啊,基本的方法呢,也就是这些。总的来说, early 这个类型呢,它的处理方式绝大部分都是便利在这个基础上进行的一些处理。好,我们今天就讲到这里,希望大家对 early 类型的功能有一个大致的了解。

今天呢,我们通过原码来看一下 a realist 的扩容机制。首先我们看一下第一种,我默认又一个 a realist, 这这个时候它的大小是多少呢? 我们点到 a realist 里边,可以看到有这么一个副值语句,可以看一下啊,这个值是一个空的 object 的一个数组,哎,再看看 element state, 他说 a realist 的一个字段,可想而知他就是 a realist 中用来存储我们数据的核心字段。 再回到这里,我们可以看到 a realize 的默认构造函数,他就是创建了一个空的数组,这个时候还没有容量。这个时候当我插入第一个元素的时候,那 a realize 里面会发生什么变化呢?我们一起来看一下。可以看到,首先他会去检查我们当前 存入这一个元素需要最小的容量是多少,及我们数组容量够不够。这里的塞子加一就是我存这一个元素最小需要的容量塞子,因为表示是我已经存入的元素,这里你再理解一下。 我们继续往进追,可以看到,在判断当前容量够不够的时候,我们需要先计算当前的容量吗?所以我们来看一下这个 calculator company, 它是传入了我们当前的 element data 和我们最小需要的容量大小。可以看到,在计算大小的第一步,它会判断我们 element date 是不是刚才默认构造函数里边的那个空数组, 如果是的话,那他会在我们需要的最小容量和默认容量里边挑一个最大的返回可以看一下这个默认容量大小,他是十。可以看到, 按照我们刚才的步骤,我们扭一个 realist 以后,添加第一个元素的时候走到这里,那么它的 main captain 就是一, 默认个默认大小就是十,那么这里他就会返回一个十。可能有人会疑惑,这里如果每次像我上面那样写 ad 的时候,那他的命 capt 永远都是一啊,他干嘛还要再去和默认支笔大小呢? 因为命他有时候不一定是一,比如我调了 addio 方法以后,那我里边有多少个元素,那我这个命 captain 他就是多少。如果 animalty 的不是我们默认的空数组的话,那这里就是我们需要最小的大小,是多少就返回多少。 当需要的最小容量计算完以后,就开始到这个里边去检查容量够不够了。我们进来看一下第一个他会给这个 modcont 加加 modcond, 它主要注意 用来集合被修改的次数,比如说我们添加了一个元素,也算是被修改,所以这里要进行一个记录。接下来会进行一个判断,就是我们当前需要的最小容量如果大于数字的长度,那证明容量不够了,就需要扩容,否则不需要扩容则什么都不做。按照这种写法, 我需要的最小容量应该是十,而数组长度是零,所以就会进行第一次扩容。我们来看一下是怎么扩容的, 我们看一下 gru 他是怎么扩容的。首先呢,他会记录旧数组的大小,然后他会计算新数组的大小,新数组的大小是旧数组容量加上旧数组的一半,因为这个 按位计算往右移位的话是除以二。然后他会去判断,如果新容量没有我最小需要的大,那则取我最小需要的容量大小作为新的 容量,可以看一下新容量如果大于 max river size 的话,则会进行一个 huge competit 的一个操作。这里可以看一下 max river size, 它最大值是 inter 最大值减八,那么它就会进行一个 huge competit 的一个操作。入餐呢是我们需要的最小容量。 我们来看一下这个 huge cavity 里边是什么。第一个呢,就是说当我们需要最小容量,如果小于零的话,他会抛出一个内存已满的异常。 这里为什么是小于零呢?因为我们能申请到 arrival 数组最大的值是 inter 的最大值,当 inter 的最大值超过 inter 最大值的时候,他就会变成一个负数, 可以看到他变复数的过程是一个未运算。如上图所示,接下来就会判断,当我们需要的最小容量如果大于 max river size 的话,则返回 inter 的最大值,否则返回 max a river size。 所以这里要纠正一点,就是我们的数组最大空间是 inter 的最大值,而不是 inter 的最大值减八。 那么问题来了,第一个有人可能会很好奇, max arrival size 为什么是 inter 最大值减八呢?大家可以先想想我下个视频详细和那个微运算一块讲吧,不然太长了。 最后我们再来看一下这个扩容函数,新容量正常大小就是在旧容量的基础上增量他自身的一半。到这里呢,就是我们的数组容量已经扩好了,足够支持我们插入新的元素了。 最后呢,我们回到这里,可以看到我们给数组中插入我们的元素塞子加加,那塞子最开始比如说是零的话,对吧?那我们给第一个插入元素,然后塞子的值变为一,最后返回成功。 到这里就把 realist 扩容的整个过程讲完了,接下来我们看一下这种,就是我 new realist 的时候,里边给了一个固定的大小,可以看到这里的话,他会直接给厨师画一个对应大小的数组。 那么后面 a, b, c, d 的插入,大家可以根据我前面的代码,然后我自己再捋一遍这里呢?当插入 d 的时候他会进行一个扩容。通过上面的一些分析,我们可以看到 river 他默认的大小是十, 并且呢他在扩容的过程中会有数组的拷贝,所以如果我们对于性能有足够强严格的要求的话,那我们可以根据实际情况,尽量在初始化数组的时候给他一定的大小,从而避免不必要的频繁扩容。

eric 和 link list 有什么区别呢?哈喽,大家好,我是麦克,一个工作了十四年的家务程序员。这个问题主要是考察应届生和工作一年左右的程序员,这两个结合都是我们在企业界开放中经常用到的。 如果你不知道这两个集合的区别和他的底层原理,可以在我的评论区的置顶中去领取一个三十万字的大场面式指南,这个指南里面包括这个问题的完整回答。 arist 和 link list 呢,是 java 结合框句中 list 接口下的两个时间类,也是我们经常使用的结合类,所以这个问题本身的难度非常低。 不过呢,也是考察大家对于这两个集合的理解,来判断在工作之余是否有深度的去思考过技术的本质。下面我们来看一下这个问题的完整回答。关于这两个集合的区别,我认为有几个方面,第一, 内部的实现方面。艾瑞斯的内部呢,使用的是数组的实现,通过锁引来访问元素,支持快速随机访问。 link 的类似内部,使用的是双向列表来实现,每个元素都包含一个指向,前一个元素和后一个元素的引用,适合插入和删除操作。第二,数据访问的时间复杂度不同, iris 的时间复杂度是 o e, 也就是我们的常量复杂度。 link list 需要从头部或者尾部开始便利链表,直到找到目标元素的位置,所以它的时间复杂度是一个 o n。 第三,空间占用方面。 iris 呢,使用数组来存储数据,所以占用的空间是连续的,可能会产生内存碎片。 link list 呢,通过链表来连接元素,每个元素都包含前后节点的引用,占用的空间会相对比较大。以上啊,就是我对这个问题理解,如果你喜欢我的回答方式,记得点赞和收藏。我是 mike, 我们下期再见。

嗨,大家好,今天我们来进行我们使用 power odo medo 教程的第一章的第七节课,嗯, 接送的介绍。在这节课中,我主要给大家讲一下接送的定义和制作接送以及读取接送的一些方法。首先我们看一下什么是接送,接送是那个 javascript object to nato 型的缩写,然后一种是基 于佳博斯 grip 数据定义语句的语言,然后接送现在不仅应用于佳博斯 grip, 然后还用于在这个加瓦, pcp, python 各种语言当中的数据交换,尤其现在就是说用的最多的是 a 加库和 rest ap 啊。然后大家可能是没做过编程的一些朋友,可能对这些语言不是很, 嗯,接触的不是很多,其实接送就是一种数据数据交换的一种一种语言哈,是非常简单,这种语言非常简单,也是现在市面上用的最多的一种数据交换的一种语言。 然后这个接送的基本的用法就是说,第一就是说一种常用的情况是在这个大 括号当中用冒号分隔这个变量和值写成,写成如下就是姓名,然后冒号,然后照例。然后第二个就是说你可以通过用逗号来连接他来指定多个变量的名称和值,像这个姓名是叫青云烟,然后 中间一个逗号,然后是年龄是二十六岁啊,打个比方,我们这种最常用的这种写法哈,第一种就是说用户信心,然后用户的 user d, 然后是 a, 这个 user ared, 然后 user name 是小红,这是一个接送的一种写法。 还有一种接送就是说大家看了比较碰见的比较多的这种写法也是比较复杂的,这种写法哈,就是说接送的和这个呃和 速度进行连用的写法,这种用法现在也是比较多,嗯,大家看起来会比较乱,但我让我们具体的讲解一下。 首先这个中括号,这个中括号其实就是指定这个数组,然后数组可以元素可以用,就是字符串,也可以是数字哈,下面这是数字,然后可以是控制,也可以是真假真假区分和对象, 哎,这是对象哈,对象列表这一块就是对象,然后和数组,这都是数组, 数组里面也可以是数字,也可以是文字,文字必须是用双引号把它隔开,呃把它括起来,然后中间要有逗号把它隔开,然后在数组里面还可以再加数组。大家看了这个 这个速度里面还有在于速度,速度,我们下面就要把用用这个帕瓦奥多密度 在解析这个接送读读出来。这节课我主要给大家介绍我们在这个 power odo mate 迪斯库 double 里和这个 power odo mate 这个云端的这个两种 poweroto mate 这个工具里面,这个对这个接送的使用方法来进行解析。 在这个跑沃欧多妹的迪斯库里面,第一步首先要设置变量,设置变量就像这种啊,我们自己设设置一个变量, 然后这个变量要设置成对象的形式,然后我们第二步要将这个接送,将这个变量我们前面设置的这设置的这个变量,嗯,转变 变为自定义对象, 然后我们再从这个自定义对象里面,然后获取这个接送的属性和获取这个接送的速度两种办法。然后第二种途径就是我们在这个跑步 order me 的这个云端里边,这个云端跑步 order me 的这个工具里面 对这个接生要进行解析啊,首先我们要设定初始化变量,对这个接生进行初始化变量,然后我们还要对这个接生进行分析,用这个分析接生这个数据。 第五我们对街上进行分析完之后,然后我们再从这个街上里面获取这个街上的数 属性和接送的速度。所以说 power order made ds dof 和 power order medal 这两种这个 自动化处理的这个工具看起来好像是一样,但是对街上的处理是完全不一样的处理方式,大家,嗯,上完这节课之后就会明白了啊。让我们先首先看一下我们的实力, 我们来到了我们这个 power order mate disktop 的这个这个桌面,打开我们这个,呃,第一章的第七节课打开, 首先我给大家解释一下,我们这节课的这个已经制作好了,我已经制作好了这个内容,首先就是说我们在这边设置个变量,设置变量是在这个这里面啊, 设置变量,设置变量,把设置变量拖进来之后,然后大家看一下我设置这个变量,设置个变量,嗯,我就不一一给大家写。首先就是说我给这个变量起了个名字,就叫蛮招耸, 然后这个变量,嗯,卡了,卡了里头,然后我把它设成这个数组,然后数组这中间是用逗号进行隔开的哈,这就是我手写的哈,手写的这是 这个,呃,对象,对象列表,这是一个数组,但是这个数组里面是属于排列啊,是用大括号括起来的哈,这是大括号 啊,然后这边是排列,排列,排列排列,然后这个这也是个排列,这就是我们对这个这个接送现在最复杂的一种写法方式。 然后在这里然后我们再给加上一个,将节省转换为自定义对象,然后是在这一步哈变量里面这一步,然后我们打开看一下, 然后我们上面定理,这个变量就叫 my my jason, 哈,这个变量就叫 my jason, 大家看一下这个变量, 变量叫满接送,满接送,然后我们把这个变量转换成这个自定义对象,然后在这里 这个这个变量选择变量,我们就可以就选择这个马接送,然后接送,然后声称的变量就叫接送 s cut the more object 啊,然后然后我们下面就要用用一下这个转换成变量,然后首先我我们要获取接 属性,然后说或许这个接送的属性,嗯,是在这个,我们刚才已经把接送转换成自变量之后,在这后面又加一个逗号这种写法,这种写法是这个逗号,然后看了 color list, 然后靠 list, 然后这属于接送属性,也或许接送属性这种写法。消息框五确认,然后这些后面就不用改动了,然后保存一下, 然后我们首先做这一步,然后我们运行一下哈,取出这个 color distal, 呃, color list 我们看一下运行, 然后这 color list 就是红色、绿色和蓝色哈,然后确定一下,大家 会看到上面这个 color list, 然后是红色、绿色、蓝色就是这个属性,把这一行都给取出来了,这个值啊。 color list 是这个接送这个 object 的这个属性啊,然后下面这一个我们就要获取这个 接送每一个,每一个值,哈,每一个值,它属性当中的每一个值,哈,大家看一下这一个,我们首先加一个 foreex, 这个 forage 是在哪加入的?是在循环这里面,循环这里面加入 forage, forage, 然后加入 forage 之后,然后嗯,要 替替代的值,哈,替代值这个 forest, 然后我们就是说个上一步,我们抽出了这一个,嗯, color 绿 找卡特利斯的这个属性,然后在在这个后面加一个小逗号,然后加上卡特利斯的这个变量, 然后把每一行都储存到这个 carry 的 item 里面,然后我们用这个显示消息这个,然后把每一个就是说 curry 的 itam 给它显示出来,然后,然后我们在这前面又加了个 z z 啊 z z, 然后这是我自己用手写的这一个,然后这是一个边脸啊, curi 的 it, 这是个边脸,然后我们确认一下,可以,这面我们执行一下, ok, 就像之前我们把这个关掉,把它显示消息,把它关掉,禁止操作,点击右下右键,点击一下禁止操作,然后把它关掉,运行一下,看一看,然后他会 一条线,是贼贼的,红色啊,这是红色,然后贼贼子是绿色啊,绿色,然后再显示一下,贼贼子是蓝色哈, ok, 确认好就执行运运行完了,这就是我们在这个 power order mate 的 disco dough 里面这个接送的使用方法。下面我再给大家介绍一下我们在这个 power order mate 这个云端处理的工具上,然后对这个接送的使用方法。首先 嗨,我们来到了我们这个 power order mate 这个云端这个工具里面,然后我们在这里也给大家介绍一下我们如何使用这个接送。首先我们打开这个第一章的第七节课, 首先我们第一步,这个是手动出发流,然后第二步是设置,呃,初始化变量 垂直画面呢?我们看一下, 嗯,大家会看到这个, 大家会看到这个初次化变量,我这边是设置了这个 y 接送啊,然后这个类型我们把它定为一个对象, 给我一个对象,这就是初始化变色变亮的对象啊,然后这个写法是不跟我刚才这个一样,是卡罗利斯的哈,然后拿布利斯的这很多的情况,很多的写法, 然后这个写法是跟我们这个 power order me 的 disco 豆腐是一样的写法哈,然后在这面这个初始变量了添加这个方法哈,是在这一个,然后点击一下这个插入新步骤,把 鼠标放上,放到这里之后就会出现这个十字,十字号,插入新步骤,点击一下插入新步骤,在这里输入一个变量 变量啊,也可能就直接就跳出来了哈,然后初始花边量,你可以点击一下这个初始花边量, ok, 然后输入边量名,你可以随便输入一个边量名,然后 然后在这里,然后你可以选择对象,然后把我们刚才写的那些这个值,然后就把它输进去, 关掉,然后这个字,哦,这就是,这就是这个,我们这个就设置好了, ok, 大家看一下啊,这就是我们要初始化初始化变量的设定啊, 关掉, ok, 然后对这个数字化变量的设定,然后我们要在这里有个加上一个分析阶层,这个分析阶层是在哪一个步骤也是添加这个内置里面,内置里面有个 数据操作,然后在这个数据操作里面有个分析接送啊,大家点一下分析接,分析接送的这个内容,然后我们就选这个刚才我们上面设置的这个变量,然后框架 框架我们就要从视力生成,点击一下下面这个从视力生成,然后把我们刚才这个上面这个接送上面这个接送设置的这个内容,然后把它复制一下粘贴到这里,粘贴之后完成,完成 之后你会发现这个呃 powerovermate 就自动把它生成了这个 type object, 然后 properties, 然后是这 color list, 然后 type, 然后是 urin 啊,这是那个数组的意思哈,然后它会自动生成这些, 就是说,嗯,他的框架, ok, 这就是我们要加入这个分析接送这功能,我们把它删除了,我们下面因为下面有了,我就把它删除了哈,然后我们在这边把它分析完了这个接送之后, 然后下一步我们要获取这个接送的数据属性的数据啊,然后在这里插入新步骤,然后添加数据,然后选择操作, 选择操作,然后我们在这边,嗯,还是用这个内置里面这个有个, 有个数据操作,有个数据操作之后,然后我们点击一下编辑,编辑里面,因为我们上一步是这个名字叫做分析接送哈,然后是分析接送,分析接送项目里所有的属性都已经显示到这里面了,然后我们点击一下这 color list, okay, 好,我们把它呃,点击一下上面这一块,把它关闭了,它啊, 然后,然后我们在这边,然后再就是说应用到每个获取接送的数据啊,然后把下面这这两个给他 删除它,然后下一步我们就是说,嗯, 要获取每个数组的数据啊,然后在这里新添加一个,新添加一个,我们在这个控制里面有个应用到每一个, 用到每一个,然后就首先这一个点击一下这个输入框哈,把鼠标放在这里之后,从先前的步骤中选择一个输出,然后我们先前的步骤是这个分析接送哈, 然后我们这个分析接送,然后我们就把输入也是输入这 color, 我选择这个 color list 啊, 然后在这里然后添加操作,然后 color list 当中的每一个值,然后我们 添加操作,也是我在这边还是用这个用这个数据操作当中的编辑,大家看一下这个编辑,然后大家向下移,嗯, 就是把鼠标放到这里之后,然后右边这个框会出现,他可以选择了这个项目啊,然后就是一直移到下面有当前项,点击一下当前项, 嗯,这样我们预测试一下,测试一下,然后点击一下测试,手动 点击一下运行流完成,哦,他已经运行完毕了,然后我们 看一下他来测试结果啊,这个是属性,这个是输入的是红色、绿色、蓝色,这是个数组啊,这输出的也是红色、绿色、蓝色,这也是个数组, 是没错误的。然后下面这一个,下面这个点击一下编辑,然后他是以分三步进行输入的哈,因为我们上面是这是个数组哈,然后这数组,然后从接送当中的数组是接送的数信用当中的数组, 然后第一步,然后他是输,输入是红色,然后输出也是红色,我们看一下下一步,下一步输入是绿色,然后输出也是绿色,然后再看一下下一步, 然后输入是蓝色,然后输出也是蓝色,这样就没问题了。这就是说接送里面的数组的数据我们也取得了,然后 整个数组,然后我们也可以也获取了。然后这,这就是我们对这个 接送制作,还对这个接送从接送当中获取数据的。在这个 power odo middisco 和这个 powerodo, 嗯,跑我我都没抖。这个云端这个处理器的两种的制作方法,不同系统数据之间的传送是经常遇到的一个一个难题啊。也是大家如果对这个节省的构造和节省运用能够熟练掌握的话,一定会大大提高我们的工作效率, 一定对,会对我们这个自动化处理一定会大有帮助。好,谢谢大家。我们这节课就到此为止,我们下节课再见。拜拜。

r a 和 vs 有何区别? 欧瑞可以存储基本类型和对象类型,欧瑞丽丝团只能存储对象类型。欧瑞是指定固定大小的,而欧瑞丽丝的大小是自动扩展的。 array 的方法没有 array 的多,比如 app r array, mool arrow iteration 等方法是用 array is 有对于基本数据类型集合,使用自动装箱来减少编码工作量。但是当处理固定大小的基本数据类型的时候,这种方式相对就比较慢。孩子请不要再内卷。

而 l is 的和 link 的区别是什么?一、数据结构实现,而瑞丽斯的是动态数据的数据结构实现,而 link 的 list 是双向链表的数据结构实现。二、随机访问效率,而瑞丽斯特比 link 的 list 在随机访问的时候效率要高。因为 link 的 list 是线性的数据存储方式,所以需要移动指针从前往后依次查找 增加和删除效率。在非首尾的增加和删除操作, lend 的意思呢?要比 arielis 的效率要高,因为 arielis 的增山操作要影响数组内的其他数据的下标。 四、内存空间占用 link 的 listener 比 avid list 更占内存,因为 link list 的节点除了存储数据,还存储了两个零用,一个指向前一个元素,一个指向后一个元素。五、现场安全 elisa 和 link 的利斯特都不是同步的,也就是说不保证现场安全。综合来说,在需要频繁读取集合中的元素时,更推荐使用 elisa, 而在插入和删除操作比较多的时候,更推荐使用 link 的利斯特。

ary 和 ary list 有什么区别? ary 可以容纳基本类型和对象, ary list 只能容纳对象, ary 指定大小后不能改变。 ary list 可以动态扩容。 ary list 提供了丰富的 api, 相对 ary 来说使用更加便捷。每日一问, ary list 扩容后长度是原来的多少倍呢?

今天开始呢,我们来学习核心内库中一些比较有用的类。这节课呢,我们来讲一个叫 i release 啊, 那之前呢,我们如果想存储多个值,或者是多个对象,用的是什么?是不是数组啊?但是数组呢,它有一个最大的问题, 数组的容量是固定的啊,比如说下面这个例子,我这是一个字不串数组,里面是不是放了五个字不串元素? 但是这个字不串数组啊,它的容量在一开始就固定死了,比如说现在它就容量固定成了五,如果你想再多放一个元素,行不行啊?就不行了啊,就放不下了,那这个怎么办呢?怎么办? 哎,我们得再创建一个比原来这个数组大一点的一个新数组,然后把旧数组的元素还得一个一个迁移过去,比如说旧数组大小是不是五啊?那我们再创建一个新的数组啊, 这个新数组我们叫个二瑞一,你有一个 spin, 对吧?新数组的大小是不是比原来得大一点,比如说我设成六。好,这样呢,这个新数组创建好了,然后新数组里是不是还没内容啊?我们可以打印出来看一下啊, 当然打印数组呢,你可以去便利,对吧? array 零 for i, 这是以前教过的一个快捷键。 好,然后我们可以打印 re 零括号 i, 但是如果仅仅是为了打印,你写一个循环好像有点, 这个杀鸡用了牛刀是吧?哎,确实能打印出来,这里再给大家教一个啊,比较好的查看数组数组内元素的内办法啊, 我们可以这样做,用一个工具类叫做 arrays 啊,从它的名字大家都能看出来, array 就是数组的意思啊, arrays 就是跟数组相关的一些工具方法啊,在这个类里,我们可以用它的一个叫 tooserene 的方法, 这个 tosrin 呢,参数就是我们要啊查看内容的数组,它的作用啊,就是把数组里面这些个元素拼接成一个什么 sing 字符串儿,形成了字符串儿以后呢?哎,我们就可以直接用这个 synthel alt 去打印出来啊。好,那我们来看一下,我把旧数组 ery, 零,还有刚才这个新数组 ery 一它们的内容都打印出来看一看啊 啊,这个数组是不是 a, b, c, d, e 五个元素对吧?但是新数组里面有东西吧,还没有啊啊,它是六个元素,当然这六个元素都是 n 啊,都是 n, 没内容, 那怎么把这个旧数字内容一点一点啊,给他迁移到新数组中去, 哎,这时候你就必须写循环了,我们 urray 零去来一个循环, 每循环一次,那我就把 ari 零,它的第二个元素是不是拿出来复制给新数组这个铜锁引的元素啊?啊,复制给 a r 一的所以零的元素 啊,这个效果呢,就是把旧数组零号元素拿出来,对吧?复制给新数组的零号元素再循环一次,那就是把旧数组一号元素拿出来复制给新数组的一号元素 啊,这么复植一遍以后啊,其实就达到了一个把旧数组元素迁移到新数组的效果。 你看我循环完了之后,我们再打印一下 啊,旧数组不变,对吧?但新数组呢, 减五个元素是不是变成了 a, b, c, d, e? 哎,当然最后一个还是 not, 可以认为它是空着的,对吧? 啊,最终呢,我们可以在新数组里啊,再把最新的元素给他加进去啊,比如说我们又要加一个 f, 对吧?好,那我们就直接写在这了。呃 re 一 它的,所以是不是零一二三四五啊,所以是五啊啊,给这个新的元素 f 啊,最后我们重新运行一下。 好,这是不是才达到了?呃,迁移旧的元素并且添加新的元素,最终新数组我们留下,旧数组就可以不要了,对吧?好,不过呢,从这个例子我们也看出来了, 你要想往这个数组里新加一个元素是很麻烦的一件事情啊。那么这个缺点啊,我们称之为数组,它不能自动的扩容 啊,那我们怎么解决这个问题呢?哎,就是我们今天的这节课的主题啊,就是 every least。 好,接下来我们就来讲这个 air list 啊,它呢就可以用来替代数组比数组方面的一个地方呢,就是这个 air list, 它内部可以去自动的扩容啊,用起来就更为简单。 好,我们把原来这个代码咱们给他抽成一个方法,目的呢是备份一下啊,我们抽方法呢, ctrl r m 啊,然后给方法随便起个名字。 好,这个方法代码我们就不关心了,把它折叠起来。好,我们先来创建一个 every list 对象啊, new 加上它的构造方法 every list。 注意啊,大家一回车的时候 id 呢,会帮我们生成一对尖尖括号,对吧?那这个尖括号呢,大家先把它去掉吧啊,他对我们目前的讲解没有什么影响后面的作用呢啊,会讲啊 啊,先不要那个监控号,这样呢,我们就创建出了一个啊 i release 对象,调用的呢,是他的无餐构造, 如果我们调这个无参购的,它会有一个默认的初始容量, 这个初始容量就是十 啊,也就是他留了预留了十个空位啊,让你可以放多个元素吗?啊,那么如果你调了他的有餐构造啊,比如说我给一个五,那这个意思就说我自己指定了他的什么数数容量啊,就不是默认十了,而是这里指定的是五 啊,这个时候我们的初始容量啊,就是五, 如果你不指定啊,默认的储存容量是十。好,这样我们把这个 air release 对象先创建好,创建好之后呢,我们引入一个局部变量代表它。 好,那对象有了,那接下来我们往里面加一些元素啊,比如说呢,我往这个 every list 里面, 天,咱们我们加元素呢,调一个叫 a、 d、 d, i 的方法来添加元素,我们还是加那几个字符串元素啊,比如说来一个 a 啊,这是一个元素,对吧?再来一个 b、 c、 d, 一按那个 ctrl 加 d 啊,就可以复制一行啊,复制一行。好,我们加了五个元素了吧。好,那接下来如果我再加一个元素啊,我在 a、 d、 d 就会来一个 f, 不怎么样,哎,不用担心啊,因为咱们的 average 的一个特点就是它内部啊,已经封装好了这个扩容的逻辑了,你前面五个元素把这五个空位占满了,是不是容量 接下来放第六个的时候容量不够了,哎,它内部已经帮我们封装好了那个扩容逻辑。 好,那他的扩容逻辑是怎样的呢?啊,内部啊封装了这个扩容逻辑,每次呢他会比原来的容量啊大一点五倍啊,就是按一点五倍来扩容啊, 按一点五倍扩容,那你看我们原来的容量储水容量是多少?是五吧,对吧?那五乘以一点五 好像是一个小数啊,对吧?哎,好像是个小数,那这个小数怎么处理的呢?啊?他是向下 下去整啊,五乘以一点五,是不是最终是一个七点五啊,对吧?啊?七点五向下去整就是直直接舍弃小数部分啊,我也不是做什么四舍五入啊,直接把小数部分舍弃,这容量就变成多少,哎,七了, 能理解吧?哎,那七是不是就可以容纳下新的第六个元素了? 那如果你又往里不断的去加一些元素,那七个空位也不够用了,怎么办?哎,没关系,他继续扩容,还是按刚才的规则七再乘以一点五,对吧?哎,这个就变成多少就变成十点五啊,哎,十点五, 十点五向下去整,是不是就变成十啊?所以它这个扩容就是按五 到七到十啊,以此类推啊,只要不够了,他就帮你去把这个容量啊给他加大啊,让你可以放下这个元素啊。那我们来看一下啊最终的结果啊, 这里我们直接去打印这个 list, 打印 list 对象的时候,它其实内部是调用了 list 的 two screen 方法啊,顾名思义 two screen 啊,就是把这个 list 啊 整个这个整体啊,连通它里面的元素,给它变成一个字母串儿类型啊,拼接成一个字母串儿,一个字母串儿,是不是可以方便的配合 system alt 去打印出来? 平时呢,我们可以把这个 two string 省略掉啊,因为它内部就会帮我们调那个 two string 啊,好,我们运行 是不是可以看到 a、 b、 c、 a、 b、 c、 d、 e、 f 啊,六个元素都加进去了,对吧?好,所以再也不用担心容量不够了啊, i release 内部已经帮我们封装好了扩容逻辑 啊,接下来我们就通过这个网页啊,给大家讲一下这个 earliest 内部是怎么工作的。其实啊, earliest 内部还是一个数组,比如说我们指定这个 earliest, 它的初始容量是八,那么将来啊,它就会创建一个大小为八的数组, 那这里的零一二三五六七,这是数组元素的那个,所以啊,所以好,比如说吧,我先给它里面加八个元素啊,一二三四五六七八 啊,当然这个元素我是为了方便啊啊,一次性添加了,但实际上它是呃调了八次 a、 d、 d 方法加的啊,看一下,加第一个元素,对吧?第二个元素,第三个元素啊,以此类推, 是不是八个元素加满了?加满了,下面是关键啊,比如说我加第九个元素了,那这个数组的容量是不是不够用了?那放不下了怎么办呢?哎,其实就是我们一开始给大家演示的,我得再创建一个容量更大的新数组 啊,看一下啊,这时候你调 a、 d、 d 方法的时候,它就会创建一个新的数字,容量多大呢?哎,就是按我刚才给大家讲的一点五倍那个规则,八的一点五倍 是不是十二呀?哎,他创建出的新数组容量是十二,但是新数组刚开始他这些空位都是没内容的,是吧?那我们是不是得把旧数组的这个元素给他一个个的迁移过来 啊?所以他得把这旧的一二三四五六七八给他迁移过来。迁移过来以后我问旧数组还有用吗?是不是没用了啊?既然没用了,我就用新数组代替掉旧数组。 好,新数组有了,那他的空位也够容纳新的元素了啊,最后再把这个九给他加进去啊,这就是扩容前后啊,他的一个工作流程。 当然如果大家再继续往里面加新的元素啊,比如说十、十一、十二, 好,是不是又放满了?好,你再加第十三个元素时是不是又要扩容了?那就跟刚才类似了, 也会创建出一个更大的数组啊,然后里面呃,把这个旧数组的元素迁移过来,对吧?接下来代替掉新数组,代替掉旧数组,然后最后加入这个新的元素 啊,这就是我们呃, i release 啊,它的扩容的原理。那我这里问大家一下, 有一个问题,就是每次他为什么扩容一点五倍?每次为什么不只扩容一个元素啊?多加一个空位,为什么?哎,这样就可以避免频繁 啊,如果我的新数组只比旧数组大一,那是不是啊?如果我不断加元素的话,他就得不断创建新数组啊?啊,这个成本是比较大的 啊,我们让他的容量比上次大的不止一啊,要大一点五倍,这样就可以避免频繁扩容。