00:00
好,接着我们说这个第七个,第七个呢叫string存储结构的一个变更啊,说这个string的话呢,在我们以前也讲到它这个容器啊,叫字符串,字符串存的都是一个一个的字符,所以我们很容易理解,它底层呢,就是差评数组存的这个咱们之前也都说过了啊,连这个名呢,你都基本上能记得住,就叫VALUE6,那现在的话呢,我们在这个JAVA9起这个版本当中,对这个string,因为我们特别常用了啊,对它的底层做了一个修改,这呢叫motivation啊,你修改的动机是什么啊,Description啊,你这个描述啊,这个修改以后呢,是怎么样一种方式,这呢,我就直接把这个官方的这个英文就拿过来了。哎,这个用英文的目的是什么呢?人家写的挺好的,大家有没有必要去翻译了是吧,直接看人家全文的就行,当然另外一个方面呢,顺便呢,大家一块看看英文呗,啊这也不排除你找工作的时候呢,有的公司呢,就是直接给你整一段英文,说你给写一个英译汉,他就想看看你平时这个读文档的能力啊,你看我上课的时候呢,平时都用的都是这个英文的文档啊,有的时候呢,突然一不小心点上这个这个这个中文的,这个时候呢,我一看还感觉很别扭啊,太装了是吧,其实下来也看啊,就是你看英文实在看不懂不也得看看中文是吧?哎,当然呢,你要有这个意识,就是诶能适当的去看一看英文,你大不了,大不了你就这样呗,CTRLC一下是不是还有这个有道词典呀,现在这个单词这个翻译越来越好了,以后的话呢,我感觉这个出国大家都不用非得去学这个英语或者什么这个语言了,直接有道不都卖。
01:42
这个这实时翻译那个是吧,再加上呢,你像现在以后5G网要是这个出来以后,这个联网速度非踌快了,直接在云端这块呢,这个你需要翻译什么,实时说这边呢,实时的给你传输,实时的翻译非常的方便啊,你看你这块呢,把这个翻译,把这个CTRLV往这一扔,翻译的其实还是挺准的啊,大家要这样看是不是显得稍微有点low是吧,咱就这样看吧。
02:10
翻译的其实挺好的,下来你可以自己试一试,或者呢,大家你装一个那个谷歌翻译在手机上没事的时候你体验体验这种新科技啥的是吧,新科技不管是硬件软件也有啊,你看这个谷歌翻译实时的,你说一句这个汉语,它也能够实时给你翻译成这个对应的汉字了,而且识别率已经很高了,除非你是个专有名词啊,你像你要说上微谷啊,这肯定翻译不出来那个具体的那个怎么去翻这几个字了啊,出来的可能就是错别字的专有名词,不行啊,你这个其他的那个正常的词语语句都可以识别,而且呢啊,你说完以后中文写出来了,下边马上英文也就出来了啊,就非常的这个先进了啊,这其实都得益于这个人工智能里边,这个叫自然语言处理这块是吧,啊,语音识别,自然语言处理,图像识别啊,推荐系统啊,这是深度学习里边呢,主要的几个应用场景了啊行,这个咱们就不谈这个现在科技的发展了,回过来看一下。
03:10
这个翻译啊,String说当前,呃,应该它这个翻译还是一个定语从句呢,是吧,说我们这个string这个类啊,当前这个string类的,它的当前的一种实现呢,是通过这个字符串。呃,是存储在这个字符串当中的,用的呢,是一个应该说这样存储字符串的,存储这么多字符的这个string,当前它这个具体的实现呢,用的是查询数组。啊,这样翻译,哎,这个差型速度一个差我们知道是占两个bit,两个字节啊两个字节呢,就等于十个16个bit啊,对于每个字符来讲,那么通过这个呃数据啊叫gathered是吧?哎,这个什么意思啊。呃,就是相当于是一个推断啊,你看通过很多这个应用程序,诶,我们这个数据的一个收集啊,可以推断出来这个string啊,它是我们堆空间当中的一个堆空间使用当中的一个主要的一个组成部分。
04:11
就我们在对空间中啊,你去声明不同类型的变量,发现string呢,是一个主要的一个呃类型啊呃,那而且的话呢,这个string这个对象它包含了,呃,它仅仅包含的是这个拉丁的就是而且呢,发现你这是主要的一种实现,而且呢,发现主要的这个string呢,它都是用这个拉丁的这种字符集来表示的,而我们知道这种拉丁的方式呢,它只需要一个字节就可以了,那1ID呢,就是你会有一半的这个空间呢,浪费了。啊,没有被使用啊,Is going unused。啊,这得有核心的。哎,就比如说呢,你实际上在我们这空间中,你存的都是ABC这样的一个呢,叫一个字符,实际上呢,这用一个BA就能存下,说另一外一半的空间都浪费了,那为了更好的去节省这个空间,哎,我们这块呢,对底层的结构动了动手脚,说呢不要用叉形数组,而用bet数组好说呢我们这个诶试图呢去改变一下它内部的这种表示形式啊,随着一类的从一个呃,UTF-16的差型的数组改成一个BAT型的数组,同时呢,加上一个编码的一个这个识别的字段。
05:19
啊,因为呢什么呢,如果你要是拉丁的呢,那就用一个字节去存,但是如果呢,像咱们中文是一个汉字。那是不是还得用两个字节去存啊,对,所以这块呢,它会动态的去做一个调整啊,啊下边就具体这样说的啊,你要是这种拉丁的这种呢,哎,它这就是一个字节了,你要是还是这个像中文这种,那就用两个字节,它这相当于就又加了一个叫哎,关于编码级的一个flag啊标识你到底是哪种编码级的这种方式啊。行,这样的话呢,就更好了,诶更利于节省空间啊,这呢是这个文档,那咱们主要呢,还是直接看底层是不是变了啊,这很简单,咱们呢,你就看一下这个JDK8哈,哎,JK8你点开咱们找这个叫。
06:03
咱们说RT嘛,RT呢找这个Java Java找这个浪包,浪包里边找string。这就找到了,现在呢,我看呢,注意是障碍八里的啊。这不Java巴里的嘛,这呢我们看到是差生数组,就咱们之前看的都是塔,这个不用多说了,所以我们现在呢,开始看这个九及九以上的版本,比如我们就看九,九的话呢,这你要注意它的目录结构不是变了吗?现在呢,你去这里边找RT呢,就找不到了啊,这个时候它有个叫Java点贝斯,贝斯里边Java Java里边long,哎里边去找string。哎,这找到了,点开点开往下一看,哎,那确实变了,改成了叫be型的一个数组了。哎,这就我们所说的变化,其他这个位置你看实际上这个接口啊,该怎么样还怎么样,哎底层结构做了一个调整,这呢我们看的是九啊九变了九之后呢,那也必然变,他也不会说再去调回去了啊,你看11包括以后版本它肯定也是BAT数组啊,哎,Java的找long包,哎找盾。
07:14
哎,这个也是一样子的啊。好,这呢就是我们在JDK9及以上的这个版本当中啊,这个string底层存储结构的一个变化啊,以后呢,你就知道它变了,不是差型数组了啊。呃,这个其实它是一个动态的啊,你也不能完全说说这个,呃,它这不能用插去存,用字节存了,你要是一个呃,像中文的这种方式还是得用两个字节啊,但是呢,会有一个字节的情况,只不过呢,这个数组我是变成BA形的数组了,你要是一个中文的话呢,我就用两个BAT呢,哎,还充当原来的一个叉啊,要是人家这种abcd的这种拉丁的文,哎,我就用一个bet就可以了。啊,但总之你肯定还是得换成它了啊,哎,这样,哎,像uff-16,这不就16位,16位的取嘛,哎,我就能保证你是中文的话呢,我就不会给你整成乱码了啊行,这是咱们说的这个string啊,底层结构的一个变化啊,这个string完了以后的话呢,我下边有一个PPT在这块呢,我还不想看啊,那string变了,那如果现在要别人再问一句,诶,String变了,那跟string相关的会不会也变呢?对你自己会不会有这样一个意识呢?应该得有,对吧,就是你自己,呃,我讲了个一,你自己也想到一老一是这样的,你自己呢,再想想还有没有拓展这些东西啊这呢,我们主要提到新特性叫string结构的变化,那你自然而然会想跟string相关的还有两个哥们儿呢。
08:35
Buffer和build了,对,变了,那他俩变不变呢?对,那好就变呗,那变还好不好啊,当然好了,那就变呗,对吧,如果没有变,如果没有变说明这个版本可能太着急发了,就是还没来得及变,那就下个版本再变是吧,哎,通常这种啊,当然这个呢,这个版本就变了啊,String buffer string builder,你看打开这呢,咱们目前看的往上拽,这不是JDK11,在这个11里边,咱刚才找的是string,你接着往下看,这不就STRING8BUILD了,点开,哎,往下一走啊,一走一走没有。
09:15
因为它它没写到这里边,它写到这个它的父类里了,点开这不就是一个bad型数组嘛,然后barba和build呢,他俩的这个父类呢,又一样啊,那你看一个其实那个也就清楚了,所以也变了啊,那不管这俩变了,看我们这个官网提供的这个说基于说基于这个string呢啊,Absttract string builder,这个builder string buffer啊,它呢,都use the same啊。就这个是吧,有点长是吧,就是做了同样的这样的一个取代啊,这样方式representation还是可以念的啊,说as view啊,说同样的话呢,在hotport,我们说这是Java虚拟机最常用的一个啊,这个官方现在用的hotport啊,说这个虚拟机它内部制的一些string相关的也都变了。
10:09
所以呢,就整个就大变啊,呃,大大变化啊,这样啊,这是这个死的一个结构,好,这个就结束了。
我来说两句