00:00
行,那么关于这个stream buffer和stream builder他们的底层源码分析咱们就说完了,大家关注的就是这个扩容,后面呢,咱们讲到集合的时候,集合里边也会涉及到相关一些结构的扩容和优化分析,到时候呢,咱们再接着讲一讲啊,这呢一方面是呃,面试时候高频的问题,当然呢,我们也不是说为了面试才去说这个问题啊,主要呢,是因为这个呢涉及到底层的数据结构了,这个是更高级的内容啊,不是简单的,我们只是调一下方法就完事了,底层做什么事我们也不知道,这个呢是比较初级的啊行,那么关于它们三者的区别呢,大家要会说。再来的话呢,肯定考这个很重要啊,这个很重要,那这是这个事儿,然后呢,这个三者关系说清楚以后呢,我们下边呢,提一下这个string bar和builder呢,他们在RI的基础之上呢,多了一些方法。啊,又是这个方法,说方法的话呢,相对来讲就比较枯燥无聊一些,但是呢,不意味着不重要啊,你光知道这个string呢,String buffer string builder是怎么回事了,哎,谁是底层什么情况,但是你不会用啊,也不行,常用的方法呢,我们这呢罗列了一些啊,这是一波CTRLC。
01:09
哎,拿过来这个呢,我是以这个string buffer来说的,String builder和它的这个方法名呢,其实都一样。就是呢,同步了啊,就这些区别,那么还有这样的一些方法,CTRLC啊,这呢就都拿过来,这呢是咱们拿这个string buffer来说的啊,Builder跟它一样,它的常用方法。呃,常用方法这呢,其实是在咱们这个,呃,String其实有很多方法呢,这个string buffer都有啊,那些呢我就不多说了,就是相当于呢,毕竟人家是一个可变的了,它就会额外的有一些功能,这个我叫TEST2。那么一开始呢,涉及到这个叫做aend aend就是添加的意思,诶添加的意思我们首先呢,比如说造一个string buffer,哎,还是叫S1吧,这样,哎,我呢,比如说就先用一个这个空三的构造器了,此时呢,我想添加数据,我就用这个叫openend,不像咱们string里边用加号是吧,或者叫con啊,咱们这呢叫openend,你可以添加,基本上就涵盖了我们所需要的这些类型了,哎,都可以来用的,嗯,咱们呢,你就可以随便去加啊,我加个一,这也可以,嗯,你加一个这个,呃,带双引号的单引号的一啊都可以,因为它提供了各种类型的这个方法重载的。
02:39
行,这呢是这个叫添加,然后delete delete就是山。哎,从这块儿到这块删掉,嗯,那咱们在这个基础上给它整的长一点吧,我这来一个ABC,然后又加了两个啊,此时呢,我们S1.2,我们来一个输出。
03:02
就是这样子的,哎,这呢就你可以去想象一下,就是还看着像是一个拼接一样,所以这个一呢,你不会把它或者这个一又换成这个这个这个二次码是多少的,不会啊,嗯,还是有点像这个string里边那个加号连接啊。嗯,在这个基础之上呢,我们做一个delete啊,Delete s一点,我做一个delete,嗯,目前的话呢,它的数据底层长这个样子,我想delete一下这两个。角标01C呢是二,后边的一呢是三,我想把C和一都删掉,这是大这N的怎么写二写三还是写四写四,咱们原来说过这个事儿,左臂右开,嗯,这个呢,删完以后呢,你看它还返回了一个频buff是吧。就是现在还返回了一个新的一个视频buffer了,我现在呢,就没有要那个啊,我直接呢去s out一下S1。
04:00
你发现呢,这哥们本身其实他就变了。哎,我没有去接收这个返回值啊,哎,就拿这个S1呢去获取的,哎,它就已经变了,所以呢,它是一个可变的嘛,哎跟咱们说的词string不一样,行,那进而呢,也说明这呢,仍然只要涉及到开始和结束位置的这种都是左闭右开的。下面呢,Replace替换从这个位置开始到这个位置结束,注意还是一个左臂右开的啊,替换为一个新的字符串,嗯,这个比如咱们就不调这个delete了,我把它注入掉S一点,做一个replace,哎,从指定的二开始到四结束,我想换成一个hello。实际上还是把C1。给换了。把C换成hello。哎,这不就这样吗?去掉了两个,添加了多余两个,这个都没问题,都是在现有的底层这个这个叉型数组中操作的,你要这块写的特别长,超过16了,那该扩容就扩容啊,嗯,Insert。
05:09
在这个位置呢,插入一个新的结构是吧?啊叉叉叉呢,表示它可以有重载的操作啊,嗯,这个我们还是把它注释掉,在这个基础之上我们再来操作一点,嗯,这个叫什么insert。In,你看它可以插入很多数据啊,我这写个二,在这呢,我写一个。嗯,有这个波尔行不。有是吧?嗯,在这个放直行。嗯,这边我们写了一个二,就是这个C在这个位置插入一个数据,插入一个数据呢,意味我插入的这个数据呢,就应该是冲到你这个索引二的位置了,哎,我这呢写了一个false,这个叫插入,可不是叫替换,所以我们这个C呢还在啊,就是往后移了,那那现在我这写了个false,那我要是问一下说这个长度是多少,怎么去看待这个false。
06:08
应该是多少?刘。是吧,就跟咱们说那个string其实还是有点像string呢,你用连接符连接一个false,它其实也是把这个false是不是看成五个字符了,对,这也是一样啊。嗯,在下边里色完了reverse反转,这个呢,直接有个现成的方法,我们想把这个字符串呢,反转一下,直接调revers就可以了,不用string啊,String的话呢,做不了这样的事情,这个呢我们注释掉,还在这个基础上还是1.rewards。你看这块呢,还是ABC。诶翻转完以后,这不就ABC啊,倒着看就行,Revers把本身它就给改了。
07:05
再接着这个,嗯,Index of,返回这个字符串呢,在指定的当前string buffer当中首次出现的位置,这我就不测了啊,跟咱们说的string一样,Sub string也一样啊,这呢,仍然,哎,返回一个这个从呃,Start开始啊,到N结束的N的这个索引啊。结束的左臂右开区间的。哎,这个子字符串。哎,子磁误串,这时候你要注意就是什么呢?这个时候你得要这个返回值了,我这呢调它返回的是一个磁磁误串,它并没有把我们当前的这个磁string buffer给切割了啊把它呢注释掉,我们来一个S一点,我做一个叫sub string,这个我写一个一写一个三啊这么着,然后呢,我给它al enter一下,看S2吧。
08:05
嗯,这时候呢,我们S1它是没有变化的啊。I奇呢还是ABC,哎,是你返回的这个呢,是你的子串,那这个要小心一点啊,哎一这不就是从这开始啊,BC啊这个三呢,这个就不要了啊。嗯,Char这个跟我们string里边一样,不多说了,Set char刚才最初的时候,我们这块也举了一个例子了,将指定这个位置的字符呢,改成是个新的,哎,这个也比较简单,哎这呢也就不多说了,这呢就是我们说的这样的一些方法,这些方法呢看着稍微有点多,我们呢稍微呢总结一下。诶,关于这个string buffer是一个可变的字符序列,大家呢,关注这样的几个方法叫增删改。
09:00
查查。啊,这个长度便利,诶把这几个方法呢,都关注一下就行,基本上就能满足我们平时的需要。首先增。叫openend的吧,哎,这里边呢,就写你具体的这个类型了啊嗯,在这块呢,多说一句这个openend的呀,你看我们调完它以后呢,返回的还是一个4STRING buffer,嗯,我在这个PPT里边写着呢,啊在这,嗯,再往上上一下。嗯,再往上一下就过了是吧。在这啊,你看这个呢,叫方法链的一个事情,你看我们调这个pen的方法的时候,他把这个呃,行参的这个字符串呢,加到咱们的行参这个字符串,加到我们现有的这个字符串以后呢,又把当前的这个对象又返回了。相当于咱们这比如是一个buff,我调完a pen的以后。它返回的是不是还是S啊。
10:02
那要还是S,我要还想再加我,是不是就可以后边再接着去掉openend了,哎,你又返回来还是我,那我就还再接着再去openend。哎,我们在这个点后边呢,可以一连串的去调方法,哎我们把这种呢,哎叫做方法链,哎点完以后再点点点点啊方法链的一种调用方式了。嗯,这个呢,就是有一个名词啊,了解一下这个不难理解,那这个要添加,然后删除呢。上图刚才讲了一个叫delete。啊,这叫delete修改,修改其实有两个,这个呢叫修改一个字符。还有呢,去修改是不是替换成一个新的字符串啊,查询查一下。嗯,插入。Insert。长度。L在这里边没写啊,便利。
11:04
一般呢,咱们不会自己去写个for循环遍历的,通常也就你顶多就是直接就输出一下掉two three呢,就给你其实里边帮你便历了啊,那你要非要说愿意便利,那你就自己写个for加上一个哎,Char呗。是吧,For循环里边去指定你这个到数组的,呃,这个string buffer的一个长度,然后里边就取一个一个位置上的字符呗,但是通常这块呢,咱们用的这个操作其实不多啊,但是呢,我们经常会看这个string buffer是什么,其实就是通常就直接就掉它to string方法了。啊,这是一种方式,再一个呢,就直接咱们就调to string,就看看它的内容就可以了啊。好,上面这几个呢,大家要尽可能的记一下啊,你说这些就不记了,你把这几个增删改查差长度变历这几个呢,稍微记一下行,这呢就咱们关于这个buffer,乃至于说呢,是string builder的一些常用方法,他们都是这样子的。
12:02
啊,就是一个同步,一个不同步了。
我来说两句