00:00
好,那么接下来的话呢,我们来看一看这个剩下的这几个实现类了啊,一个呢叫tree map,叫high table,还有一个呢叫practice啊前面这块呢,我们讲到了它具体的这些实现类的一个区别了。啊,这个刚才课间呢,我看我这个笔记的时候,这个位置非常严重的少了一个不字是吧。接着把它加上啊,咱说呢,在这个哈table步里边是不能够添加,咱们演示的时候说的也是布啊,忘了加这个布了,好那么下边的话呢,我们来看一看这个呃吹map它的一个使用,这个map这个使用呢,其实我们在前面讲set的时候呢,提到过这个ET了,ET说完之后呢,其实这个map呢,大家再理解起来也会比较简单一些啊好这块我们其实呢,做这样的一个呃例子给大家呢,说一下这个场景。首先呢,我们在当前这个map的包下呢,新建一个关于map的它的一个测试了。诶这样的进来啊,然后呢,只要是这个map了,我们这块仍然是要考虑到自然排序和定时排序的同样的问题啊,首先呢,我们写这个测试一好,那首先呢,我们去new一个叫tree map OK啊在这al加一个回车啊,这呢一个map就得到了啊,然后呢,通过这个map呢,我往里边去添加这个呢叫key value,注意呢,这是减值,对了啊,然后我们用这个吹塞的时候呢,说这个元素要求它呢考虑自然排序和定时排序。
01:13
那对于我们现在这个吹map来讲呢,它要放的是键值,那这是我们首先第一个问题针对的谁来排序。是建还是直还是谁?对这块呢,我们说针对的是这个键啊,其实呢,我们这个键值这个里边呢,这个K呢,是比较关键的value的话呢。呃,Value其实咱们也说了,它俩封装在一起构成的,实际上是个entry。或者你叫个noe也行,Noe是我们这个哈希map里边的叫node了啊。然后呢,我们整个存储的位置,其实呢,就是由这个K来决定的。K呢,决定了我们noe放哪noe放哪了,Noe里边那一个属性是Y6,它呢就是顺带着就也过去了,哎,核心的我们是看这个K了。好在这里边,比如说咱们就先放一些啊这个CC是吧,然后这个值的话呢,假设咱们就当学生的这个成绩吧,哎,我们先复制几个啊BB。
02:06
比如说这个。姐姐是吧?来一个随便来一个吧,啊这块呢,我们就放一些具体这个值,这个值的话呢,我们说呢,它也是可以相同的啊对应的这个VALUE6这儿呢,我就放了四个,画完以后的话呢,咱们接下来就做这个便利操作了,看一看是不是就有虚了。这个呢,我们就map点,咱们来一个叫entry set吧。啊,这块我们得到这个ENT构成的一个set行,然后呢,比如写个方循环,这呢先写成object,这呢是这个NT冒号啊,NT的一个set。这里边儿的话呢,我就不具体去取这个k value6了,咱就直接来打印一下这个entry,哎这么着啊,好,这时候我们做一个run。走起。这时候你发现呢,天然呢,就我们实现了一个排序,注意这个排序呢,针对是我们这个key的,哎,这K呢,因为你是死string类型嘛,所以这块呢,就按照从小到大的这个顺序呢来排了。啊,这呢,就我们所说的叫自然排序啊好,所以呢,这块我们回过来啊,在这个呢,我们去进行一个刻画描述啊,首先呢,我们提到关于吹材的使用呢,上面也提到了它的一个特点了,底层的使用红位数。
03:11
啊,我们把这个事儿呢先。诶,给他CTRLC啊过来。这个map呢,不是咱们讲解的重点啊,这个大家一定要注意一下。诶首先呢,提到它底层使用什么样的结构呢?去存储了,第二个我们涉及到了这个排序了,然后排序的话呢,这里边儿我们针对的是咱们的这个key啊考虑呢,进行的这个排序操作了。具体这个排序方式呢,叫自然排序和定时排序。啊,既然呢,你这个K呢,要考虑排序了,既然要比较大小了,咱们讲这个吹呃set的时候呢,也提到过,就要求呢,我们这个K的元素呢,必须得是同一个类的对象是吧。哎,这呢是我们的一个要求啊。要求呢,这个像。哎,咱们这个,诶吹map中添加的。哎,添加的这个key呢,必须是同一个类的啊,或者叫同一个类型的啊这个对象。
04:07
啊,就是我们说的这样一个场景啊,那至于说呢,你这里边儿这个Y6是什么,那我就不关心了啊,比如说我们这儿呢,是当考试成绩的啊,都是这样的一个。呃,Integer类型应该说啊,好,那我也可以呢,把这个我就改成一个叫date类型的。哎,我就这么着了,这呢是没有关系的。哎,这个我们part一下就它了。但是呢,你要说我们再添加一个哈,这个位置呢,你说我写成一个67了,这个是不是肯定不行啊。哎,这块也要执行,是不是又是class exception了。哎,又这么着了。这个大家要注意一下,哎,我们在这儿标识一下。这个位置啊,说哪会报错。哎,报错的主要原因呢,就是我们这个key啊。因为key的类型。啊,这个类型呢,我们说呢是一个啊,它呢与之前的。啊,K的类型。
05:00
哎,不一致,哎造成的啊,之前那个K的类型啊,在我们这里边儿呢,这就是死顿类型嘛。行,就这个原因啊,这儿呢是我们举的啊,是叫自然排序啊。自然排序里边呢,我们这个K呢,是用的string,这就自然而然的了,行,那我们再替换一个啊。啊,这里来个二这块的话呢,我们考虑前面我们讲这个set的时候呢,当时是拿这个呃,User来演示的,这块呢,我们也CTRLC一下,把这个user呢,咱们再复制过来诶。拿过来我就放到这儿了,行,然后的话呢,我们在吹塞里边呢,当时是拗过几个不同的user,不妨呢,咱们也借用一下啊TRC回过来啊,在这个位置,首先呢,我们也去用一个叫tree map。啊,真的没问题。啊,这个map了行,然后呢,把这几个对象呢,给大家整过来啊,这个还用的是前面那个啊。这么着CTRLC一下,CTRLR是吧,把它的替换成直接呢,就叫做user啊,Replace or一下。就可以了啊。好,然后呢,这个map呢,我们去调一个put方法这儿呢,我就把诶我们刚才这几个user呢,就放到我们的K的位置了啊,这个Y6的话呢,比如还是假设充当这个成绩这样一个角色啊,整这样的五个。
06:15
就可以了啊,那这块呢,我们就随意的就写这样的一些数据了,就。没问题啊好,那么这个时候呢,我们再往里边去做这个添加的时候,这个你要考虑了这个user这个类啊,点进来已经实现了叫comparable这样的一个接口了,既然实现这个接口了,我们稍微看一下咱们这个规则是按照这个年龄从小到大,然后年龄一样的话呢,再比较一下这个name啊,再从大到小行,有了这样一个标准,那我们就不用担心了,过来以后我们这个添加呢,就能够正常的执行啊,我们再去做一个这样的便利的行为啊,CTRLC。哎,这么着走好,那这时候我们就会看到呢,先按照这个,呃,年龄呢,这个比较年龄一样了啊,像这里边这个都是23是吧,然后呢,我们再去比较一下这个。是吧?
07:00
我们走起一下。好,接着我们看一下,按照这个年龄呢,是从小到大年龄一样的话呢,这个内幕呢,我们再从大到小。哎,没有问题。行,这个能理解是吧。这个呢,还是咱们提到的啊,在这个map也好也好,它里边呢,判断两个对象相同的标准啊,这个呢,已经不依赖于我们说的key里边的哈和的方法了啊,就是依照我们现在这个compare或者是compare to这样的方法。啊,那也就意味着大家你看一眼啊,我要是做这样的一个修改。看一下啊,这个user里边,咱们这呢,既让年龄参与了,又让姓名参与了,我把它呢,先再注释一下是吧。输入完以后的话呢,我把这个打开啊。因为这个里边咱们光比年龄了。关闭年龄了,然后我们再回过来,年龄要是一样的话呢。怎么着了?是进不去了。还是?怎么着?是不是该替换了?对,咱们这时候不是说过这个map里边的put方法是不是还有替换的作用啊。
08:03
二三。还是Tom是吧。呃,User一样了,诶杰克没进去是吧。这为啥呢,咱们现在的话呢,我这个U4是不是要添加的时候呢,认为跟U1一样了。因为一样的话呢,这个还是用原来的。咱们现在要说的是这个Y6变了啊,你看这个Tom这块呢,Y6呢,原来是不是78呀,然后现在的话呢,是不是变成45了。哎,这才叫修改。清楚吧。OK,好,这个呢是我们说的一个问题,继而的话呢,还想说另外一个事啊,比如说呢,我们现在呢,拿着这个map点,咱们去调这个叫key的话。理解一下啊,我去调离肯key的话呢,比如我就随便的我这块new一个对象吧。CTRC一下我拿过来啊,这个呢,咱们就随便换一个,就换成这叫哎马瑞是吧。随便的这块我写了一个啊,显然呢,我们这里边儿呢,也没有所谓的叫叫马瑞尔他,但是注意我这个age啊。
09:01
是不是跟的某个A一样是吧。这随便算,你不一定非得23了,我整个三十三都可以,那么这时候如果问说是不是contains这个key,大家觉得呢?是初二放三。出国放取决于什么呢?取决我们这个标准是什么是吧,标准注意不是哈code和equals拉,而是我们这个user里边你写这个方法是吧,这个方法呢,我只考虑age的是不是age一样就认为一样了。哎,所以这我们要运行是不是就该是一个处了。哎,这个你理解一下这个事儿啊,当然了,咱们一般呢,不会说就这么草率的是吧,说A一样就认为一样,所以这个主要取决于你这个方法写的时候咋写了。啊,所以呢,大家呢,还是理解这个原理啊,更重要一些啊。回过来啊,像我们刚才呢,上面提到这个场景,不也是因为你就两个H一样,咱就认为你这个K一样了,K一样的话呢,我们这个put呢,就替换Y6了。这样个情况啊,好,这个我们把它就注释一下,这个理解一下这个事儿就行了,这个呢,就是我们说的叫自然排序了,然后下边我们来看一下,这个叫定制排序啊。
10:05
哎,定制排序。诶定时排序呢,其实啊,跟咱们前边呢,这个赛的这块呢,也没太大的这个区别啊,诶我这写个三吧。首先的话呢,我们还是有一个这个叫哎tri map,呃,但是这时候这个tri map的话呢,同样的道理啊,CTRLP一下是不是得传个competitor了。所以这块你得造一个啊,那咱们还是。给一个有名的吧,哎,提前的写好啊。Comparor,诶new一个compor直接一回车啊就过来了啊,然后在这个位置,哎,分号一下,把这个or呢,我们给它放进去,放进去以后的话呢,我们接下来是不又可以。诶,就这样了,然后就又可以这样了啊,CTRLC一下原封不动的,我们就。诶粘过来啊,那么这个时候的话呢,我们添加的是这个user了。是我们到这个K的位置,所以这个位置呢,我们说哎,就是比的是你这个K。那这块呢,我们要判断的自然而然的就是啊O这个。
11:03
啊,并且O2呢啊O。哎,我们这个叫T,也是一个user。啊,下边还是做这个强转的一个操作。AUER。哎,右侧O1复制一份。诶O2行这个呢,接着就看你这个标准了,比如我们这块呢,比一下这个,呃内幕是吧,比完内幕以后的话呢,如果你说再比一下A也行,咱们就先U一点,Get一个name点。是不是叫compare to了是吧?哎,u.get一个name。哎,这样啊,然后得到一个值。哎,Y6啊一伏,如果Y6呢,不等于零。我们就直接返回你当前这个value了,哎,如果呢,你要是等于零啊,写个else,或者我这个else不写了,直接写这其实也行是吧,这个我们就继续呢,比较它的这个A啊U1.geta。
12:00
这个呢,因为是基本数类型直接就减了啊开那个A好,这个呢都是从小到大,这个呢也是小到大,这个我们就直接a return一下好,如果呢,你要不是这个当前这个实力的话呢,在这个位置呢,我们去肉。你一个啊,Run time exception。啊,类型不匹配啊。好,这样呢,我们就学完了,好写完以后的话呢,我们来compare呢放到这儿,然后呢,我们这个时候compare里边的这个呢,考虑的就是咱们要添加到map当中的T啊,针对于key进行排序的行,写完了啊写完以后的话呢,我们这时候呢,再去做一个运行。OK,这就出来了。好,这呢,我们看一看啊,是按照我们这个名来的,当然这里边儿没有重名了哈,如果要重名的话呢,你再看一下A,再比一下就可以了。行,这呢,就我们说的,这叫map的一个使用。啊,这呢我们就说完了啊,重点还是回顾去,大家呢还是要关注的两种排序方式,这一说呢,这个tree map和tree set开发当中我们用的相对来说就比较少了,接着我们来看下边这一组,下边这一组呢叫high table啊,这个呢我们说过了,已经不用了啊,它目前存在一个意义呢,就是做一个面试题出现。
13:12
比较一下它和哈希map呢有什么区别,这就过掉了,然后呢,目前呢,我们主要想说的就是它的一个子类啊,这个呢叫properties,它呢是叫哈希table的一个子类啊,然后我们提到它这个特点呢,就是其对key和value诶都是死string类型的。啊磁类型的,然后呢,常用来处理属性文件啊。处理属性文件,OK,行,这块我们就给大家举个例子啊,让大家呢感受一下就可以了,所以呢,在map这块呢,我们右键啊,去新建一个我们叫properties,它的一个test啊,就这么着。这呢,我们写成是一个单元测试,方法呀,没方法呀都可以。都可以啊。
14:00
好什么意思啊,处理属性文件,嗯,比如说呢,我们在这个程序运行的过程当中啊,可能会读一些信息,就好比是呢,在咱们idea当中,比如说呢,像这个help这块呢,咱不也会有一些这个配置的一些信息。之前呢,大家也都操作过哈,比如说加了这样一个,咱们在单元测试方法里边呢,想使用这个scanner,不是说得加上这样一个配置吗。有的同学呢,加上这配置之后呢,把这个IDEA1关,结果呢,在一起idea起不起来了。哎,这个原因是啥来着。对,就是你这个位置呢,就是写的这个信息上写错了啊,咱们idea呢,在启动的时候呢,他都要去读这些配置信息的,你配置信息有误的话呢,他就不知道该怎么去解析了,它就启动不起来了。啊,那么类似的啊,咱们idea其实很多软件呢,都是这样子的,包括像咱们说的Java也好,数据库也好,他们这些软件在启动的时候呢,都会呢,存放一些配置数据,这个数据的话呢,它就放到一些文件当中了。在这个软件启动的时候呢,就读这个配置文件。来去加载这个信息,那回头这个信息的话呢,比如说我们想改,那你可以呢,直接改这个文件,改完文件以后的话呢,比如说你要是数据库服务器,你把这个服务器呢,再重启一下,它就会重新的去读这个配置文件了。
15:11
哎,这样一种方式啊,那这个信息的话呢,有同学可能会说,那我也可以不写到配置文件里边,我们就写到我们这个程序里边。是吧,那你比如说类似于啊,我们现在就在这个代码里边呢,咱们就声明了,比如说呢,叫诶死针形的name名字呢,叫to姆说诶死针形的叫password。这个呢我们叫ABC123,这个呢就是这个用户名密码,然后接着呢,拿着这个用户名密码呢,我们去操作下边就一些具体的代码了,把这个呢,如果我们看作是叫数据的话,下边呢我们就可以呢叫诶操作这个name和这个password。呃的这个代码,所以呢,这个呢叫数据,这个呢就叫做这个具体的代码。啊,这个我们这样写是吧。代码是吧,诶用于操作这个name和password啊下边呢,你写了这个好多的这个逻辑代码,那么这样写法的一个弊端呢,就是我们把这个数据呢和代码呢,是不是就混到一起了。
16:11
啊,那就或者换句话说呢,就耦合度比较高嘛,然后呢,把这个程序呢,你编译以后啊,生成自己码文件,然后再打包,然后我们就发布到服务器上了,然后程序就运行了,诶那回头啊,你说诶我这个数据啊,我想改一改。啊,你想改的话呢,是不是只能来改代码呀。诶首先呢,你这个耦合度比较高,你得找你看哎呀,我写到哪个位置啊,就挺费劲的是吧?诶找到这个代码了,然后改了,注意你是一旦改这个数据,就意味着你改了代码了。那就意味着你整个这个类是不是得重新编译。啊,重新编译,好多都编译编译到一起,如果你要是个项目的话呢,把各个类呢都得编译,这个过程呢,咱们称为呢叫打包啊。打包,打包的话呢,之后你再去做一个发布,你想想你现在呢,改代码了。你是不是得重新打包。重新发布啊,整个这个过程都得走一遍,哎,里边呢,你可能只是加了一个一。
17:04
那没办法重新来。啊,就得这么着了啊,那我们现在想怎么办呢?我把这个数据啊,是不是就类似于咱们这个idea一样啊,我把它专门放到一个文件的位置。然后在我们这个程序里边呢,或者叫代码里边,咱们呢,去读这里边儿这个数据。就可以了是吧。哎,那么在以后呢,你要再想改数据的话呢,你就改这个文件就行,因为文件的话呢,在编译或者要打包的时候呢,它根本呢还是原封不动,那个文件不会说呢,是像这个Java一样的,还点Java一下是吧。诶点Java一下编以后呢,生成这个叫点class了,咱们要是文件的话呢,这个它呃不存在这个问题,它就还是始终啊都是个T格式,那你改完它以后呢,这个程序呢,根本不用重新的去打包了。还是在读这个文件就可以了,只要更新着它就行。啊,所以好处呢很多啊,那这种方式呢,这个咱们说。这种叫方式一吧,叫数据和哎代码是不是耦合度高呀。
18:03
呃,额度高的话呢,你改就不方便了,这是一个啊另外的话呢,就是呃,如果修改的话呢。诶我们说呢,需要呢,是不是重新的去编译代码,然后打包发布是吧。哎,这个呢,是不是就比较繁琐呀。哎,这样的一个情况,所以呢,我们建议呢,使用这种叫方式二。哎,放这儿的话呢,我们就诶将数据呢。诶,我们可以封装到具体的这个,诶配置文件中,然后呢在程序中。哎,读取配置文件中的这个信息是吧,这样的话呢,我们就实现了。啊,两个方向啊,第一个的话呢,就是数据和代码的解耦。诶这呢,就相当于是对应的这个事儿啊解耦了,然后第二事儿的话呢,哎说由于呢。呃,由于我们没有呢去修改代码就省去了。
19:04
哎,重新编译和打包的过程。诶,所以这个呢,就是它的一个优点了,行,那我们就来做一下这个事儿,这个数据呢,咱们就把它诶注释掉了啊现在的话呢,我们去演示一下这个问题,演示这个问题的话呢,我们首先呢,得有一个文件是吧。这个文件的话呢,其实就用到我们后边讲IO流的时候呢,一个知识点,咱们提前呢先呃用一下后边这个知识啊,嗯,这个位置呢,我们写一个文件,比如说这里边呢,对应一个叫infer点叫properties。啊,就是info这样的一个,呃,属性文件了啊,嗯,这个我们关心的就是这个文件它到底在哪儿呢?啊,我就这么着一下啊,File点叫get absolute pass啊。这个我建议大家你就不用刻意的去记了。啊说诶我记一下不也挺好吗?因为这里边儿有个问题哈,我这儿用的是单元测试方法,如果大家用may方法的话呢,这两个路径啊不一样啊。
20:02
啊,这个小细节问题,你看我现在单一测试方法,来,我们先run一下。看一下啊,他认为我是不是在当前的这个mole下边是吧。好,所以这块呢,他既然认为我在这个下边,那我现在要保证这个文件存在呢,我就在当前这个modu的,注意啊,是这个module。哎,下边我右键一下,咱们去一个file。哎,然后这块我CTRLV一下,把这个名呢写上,就在这里边去写这个信息了。哎,比如说咱们刚才提到说name,咱叫Tom是吧,然后password,注意这个键值对的话呢,其实这就是键,这就是值,都是死string类型的啊,中间呢,咱们就用这个等号来连接,这个呢,都是咱们默认的这样的一种方式,而且呢,你就不要呢说让它长得好看一点,加这个空格了。这个呢就会有歧义了,你比如说password到底是ABC123呢,还是空格ABC123就说不清楚了啊,所以这块呢,我们就不要呢加这个空格了,就是让它这个挨着这样去写。
21:05
好,我这儿呢,就写两个简单的这样的信息,那有点类似于咱们这里边儿写的这样的这种信息一样。就是这是一种,这是一种信息的方式啊。就是杠叉叉是吧,这是一种信息的方式,然后这呢是一种方式,就是谁等于谁是吧,就是这是key,这是Y6一样啊诶注意这个呢,咱们就不在这儿说了,这以后呢,哎,讲到更高级的内容的时候呢,再说这种格式啊好这呢,我们就简单的写的两个信息了,那么回过来啊,这块你注意我们识别的这个路径呢,就是在我刚才说的,诶当前的这个model下边。这个咱们先不着急往下说啊,我这写个may方法,你看我要是把这两个代码呢,我CTRLC粘过来哈。因为我不排不排除有的同学呢,自己练的时候呢,是拿没方法测的啊,没方法在测的时候呢,我们要用啊。程序呢,执行一下你会发现呢,它是放在哪了。是不是当年这个工程的下边了是吧,所以你要用main方法,你要去演示的话呢,你注意你得在这个工程你下边右键找这个,呃,去新建一个file啊。
22:07
注意啊,我这用的是单元测试方法。啊,这个呢,你也可以不用死记硬背了,你就调一下这个方法你就知道了。你说这个方法还不如我记一下呢。这个咱们后边会讲fair啊,讲完之后呢,你知道这是一个很基本的方法了啊。行,把这个呢,我们就注掉了,行,我现在呢,把这个音符方法啊,这个我们说呢,注意。要提前创建好。啊,我已经创建好了,创建好以后的话呢,咱们现在不是要使用这个叫properties,哎,去读这里边这个信息嘛,诶我就叫proper了啊,你有一个叫properties。写到这了,哎怎么读呢,这块呢,我们要读文件中的这个数据啊,其实它是一个流的方式。哎,一种流的方式去读了,所以呢,我们还得要用一下,诶后边这个章节咱们要讲的这个流了。啊,就这个意思啊,咱们现在呢,去调了一个叫漏的这个方法,读的时候呢,你看它得是个流,这流呢没有,所以提前呢,我得先造好。
23:03
啊,所以这块呢,这个程序呢,大家不会写没关系,咱们后边讲完流以后呢,你再回过来去写也行啊。在这个里边呢,我们把这个fell呢放进去。其实比较简单,就是一个file input stream,这是一个啊,这个我们在前面讲异常的时候呢,其实也稍微见过它啊,Out加一个回车,它有异常我们就直接了。我就搜搜,其实这块呢,我们应该用好一点,因为一会还得关是吧。哎,先暂且我就先收了,然后呢,我们把这个流呢,CTRLC我就放进去。诶,他呢,也有一场奥特加格回车,诶我们就再次一下。哎,这个呢,我们就是相当于加载把这个写一下啊。加载流中的啊,文件中的数据。相当于呢,我们这个哎proper呢,它能够加载这个流呢,对应的这样一个文件,我就去读这个文件中的数据了,诶接着呢,我们就诶读取。
24:01
哎,这个呢,诶诶叫读取数据,诶怎么读呢,这个我们就用这个props点,哎,我们叫get property。哎,Get property这里边呢,就是写这个key了,有有点类似于我们那个map里边那个get方法了啊,这块呢,我们看清楚啊,是这样写的,建议呢,你就别自己写自己写了啊,直接呢,我们选中CTRLC一下,因为以防你写错啊。这呢,注意是个字符串了。这样的话呢,我们就把这个K对应的Y轴呢,就拿到了。比如说我这块呢,就也叫这个name吧。好,Pro get property这个呢,你再去我们这里边这个password。哎,这个你再放到这儿。哎,这么着一下啊,Alt加个回车,这个叫PWD吧。怎么着,哎,我说呢,就把这个数据呢,我就读到咱们的程序里边了,诶我就内幕,比如说就诶冒号一下,连接上一下我们这个PWD。就写完了就啊好,这时候我们去做一个run。这是我们文件中的数据,你看现在呢,我们就把它读到我们的程序里边了。
25:02
那如果说我们这个配置文件呢,修改了,哎叫TOM1啊,那么回过来我们这儿呢,这个程序呢,没有变,哎照样呢,还可以把汤一呢再读过来。这个呢,就是我们在开发当中常用的一种方式啊,就是这个方式二的这种场景啊。哎,就这样来做。啊,当然了,针对这道题来讲的话呢,我就Rose给处理了啊,你要考虑到说我们这有个瘤,这个瘤得关,还得确保它得能关。诶close一下,诶你可以呢,我们把这个呢,改成TRY的方式来处理是吧。哎,这个注意一下,这个我就暂且比如说不改了啊,这个我在这写着吧,还说注意啊,说因为涉及到哎流的这个操作啊,为了确保这个流能关闭。呃,建议呢,使用pack开吧。哎,这样的一个方式开始finally。诶,这个我就不调了,我不调的原因啥呢?这个一调可能代码量可能大一点,大家呢,可能就看不到主要的核心的代码了啊主要的就这几步,第一个呢,创建文件。
26:01
创建流啊,把这个流呢,放到我们这个pro里边,然后直接呢,通过property去读就可以了。啊OK啊行,这里边呢,当然也可以有这个中文啊,把它改成中文的话呢,照样也可以读进来,比如说呢叫汤姆。是保存一下回过来,然后在这儿呢,我们去run一下。没问题是吧,OK啊。行,这呢,就我们说的这叫proper的一个使用,这个呢,大家现在呢,暂且可以先不练,因为我们到后边呢,用到这种场景的时候。啊,比如我们在这个web当中,哎,我们去使用的时候呢,到时候我们到时候再讲这个问题啊,也来得及啊。好,那我们呢,关于这个map呢,相应的这个内容的话呢,其实就已经收尾了啊,然后下边我们看一下这个相关的课后练习题,这呢我们提供了两个题啊,先看第一道题,这呢添加你喜欢的歌手,以及呢,诶你喜欢他唱过的歌曲,并遍历OK这样一个情况啊,这个呢,我们看看该如何去做呢。诶首先呢,这里边提到有个歌手,然后呢,还唱过的歌,哎在这儿呢,我们可以考虑呢,诶这儿呢,作为一个键啊,唱我的歌呢,作为一个职啊,那就键指向那个值,但是这块的话呢,他唱过的歌呢,你可能喜欢的挺多是吧。
27:09
哎,那你要说啊,举个例子啊,比如周杰伦唱过的乐曲是吧,哎,周杰伦唱过的稻香啊,那这块呢,都叫周杰伦的话呢,就不太合适了,因为咱们这个K呢,是不允许放相同的是吧,那怎么办呢。对,那这块我们只能考虑说呢,就是只有一个周杰伦,但唱的歌的话呢,可能有好多个是吧,那这块我们把它呢,用一个容器装一下得了。诶这块你可以使用这个数组,也可以使用我们的,比如说release是吧,也可以哈,或者我诶放个set啊也行啊都可以好,那这块呢,我们就按照这个场景呢,我们去做一下啊。新建一个啊,比如我们叫a singer,关于它的一个测试,哎,这么着啊。哎,这样粘过来这呢,我就写成一个may方法吧。行,首先的话呢,我们有一个叫哈希map。啊,这呢,因为涉及到建对了,我们就用map了,那map这块呢,就不用多想了,我们就把哈希map当成是一个默认的选择了。
28:05
诶这呢就叫一个map,或者我们这个叫singers是吧,诶这么着,诶那这里边呢,我们可以就放具体的一个key,然后key呢,就是具体的一个歌手,那咱们先把它声明出来吧,比如说这个呢,叫singer一举个例子,比如说就是周杰伦是吧。行,诶这个呢,是我们对应的这个key了,然后呢,这个VALUE6的话呢,我们也提前的给大家创建出来,那那这我们可以考虑用一个比如叫a list。哎,装一下他唱过的这个歌啊,这个呢,我们生命成是一个a list,这个叫SONG1吧。哎,这样一个方式啊,然后呢,我们可以呢去爱啊里边呢,添加一些周杰伦唱过的歌。这个很多了是吧。这个。那我先写个夜曲吧。比较经典啊。啊,行,晴天。
29:00
七里香,嗯。发如雪。啊,你说的是屋顶。嗯,没听啊。就叫屋顶这个啊。啊,这个可能这个新新的一些歌我没听过了啊。啊,青花瓷对。还是有很多经典的啊。行就就就这几个吧,好这呢写了不少了啊,然后的话呢,这个我们放到一个release里边了,那这呢,其实就构成我们这个key和value已经出现了啊,咱们就可以呢,用这个叫singer。哎,Sings是吧,第二我们再去调这个put方法,这时呢,把这个SING1放进这儿,然后放到这儿行,这个呢是添加了一组。哎,这个叫A添加。添加这个啊,一个歌手。哎,和其歌曲,嗯,OK行,然后呢,我们再添加。
30:00
再来一个吧。不要黑我家哥哥。这个有的不都说现在这个这些年的这个华语乐坛,这个怎么说呢。这种短视频的出现啊等等的说,现在都已经没有经典了是吧?整一个。林俊杰啊林俊杰,请。呃,蔡徐坤的话呢,其实当时是谁来着,说不认识是吧。是谁来着?是潘长江还是谁?是说不认识,然后呢,一顿围攻是吧。嗯。好,这个呢,林俊杰叭如呢,我们往里边添一些歌啊,第二。对,爱的啊,江南。这个对,有时候都不敢娶这明星,林杰不能翻车吧,回头。
31:00
是吧,呃,周杰伦,我觉得应该是没啥问题是吧。嗯。听说有一些事儿不知道真的假的啊?这个还有什么来着。小酒窝。还有一个。再来一个。可惜不是我。啊,有这歌吗?啊。可惜,可惜,没如果啊。啊,我就光听说可惜不是你是吧,嗯,好诶这个呢,就四个了哈,这个完了以后呢,我们再把它添加进来,呃,类似于我们上面这个啊。这个呢来一个二,这个来一个二行没问题了啊,诶这呢我们就添加完成了啊,完成以后的话呢,我们把它呢就显示一下啊,比如说我们就来一个for循环,这个不能for循环了,现在我们来一个叫。Map点要我们这个叫entry set是吧,诶,Map singers啊。
32:02
第二我们第二这个呢,叫entry set。哎,这块呢,我们先把这个entry呢,先取出来啊,然后呢,我们去便利一下,当前这个set是不是就取出来具体的一个一个的entry了啊。这块的话呢,用增强for循环也行,用我们的迭代器呢也可以,比如说这块我们用迭代器,哎这么着操作一下啊,然后while一下,点has next。哎,在这里边呢,咱们考虑呢,先把这个,嗯,Next这个值呢,先取出来啊。OK。然后这块呢,取出来以后呢,认为是一个object了啊,咱们呢把它呢做一个强转,其实呢,就是map里边的具体的entry了。哎,这么着啊,这呢我们就写成叫NT,哎这呢需要alt加回车做一个强转,好那比如说这块我们就先写一下啊叫歌手哎冒号这个我们叫n.get一个key在这里边放的就这歌手,然后呢在呃下边呢显示它的个歌。啊歌曲有是吧,这块我们N垂点get一个叫value,这个value的话呢,我们就是用一个数组来啊填充的啊,所以这块呢,就是调这个不是数组了这个集合而release啊,然后这块就调它对应的这个图string的方法,就把这几个歌呢就都展示出来了。
33:16
啊,这个完了以后呢,呃,其实呢,就接着呢,再下个元素就可以了,好这块我们跑一下看看啊。诶这样就可以了,诶林你这儿周杰伦这儿,诶这儿呢,因为咱们是用的哈依map啊,它本身呢,添加的这个K6呢,也是无序的,所以呢不会说呢,诶我们天天加周杰伦,怎么不是他呢,这个也是正常的啊OK。行,这呢,就是我们说的这个第一道问题啊,应该没啥问题啊。好,然后呢,我们来看一下这个第二道题。第二道题呢,是这样子的,这个题呢,稍微的大一些说呢,将省份和城市的名称保存在集合当中,然后呢,当用户选择省份以后,二级联动显示对应省份的第一是供用户选择。
34:00
啊,这块提到一个词呢,叫二级联动啊,这个呢,其实平时我们都做过这样的一个行为,这个大家在这个手机端,或者你在这个浏览器端啊都有,比如说你选这个机合快递啊,写你的地址的时候呢,这个先省份啊,有时候省份前面还有个国籍啥的是吧,省份呢,城市啊,具体哪个街道啊,诶哪个区哪个街道就是当你这块呢选择,比如说呢是一个。举个例子啊,这个江苏省。诶,选完江苏省以后呢,下边这块呢,列举出来的市呢,就都是江苏省下边的一些地级市了。选完这个,比如说南京市。选完以后的话呢,下边这块呢,就是南京下边的具体的一些区了,联动呢,就是你前边这个选完以后呢,后边这个跟着会做一个调整。哎,这叫联动,比如呢,省市区这个呢,就叫三级联动了。那咱们现在呢,只有省和市,所以呢叫二级联动,OK。行,然后呢,对应的这个效果呢,整个展示呢,是有一个呃这样的一个演示的效果的,稍微我们放过来啊,诶来再回过去啊,这里边儿呢,针对于我们当前这个map呢,已经都提供好了。
35:06
这个map里面呢,这个key呢,放的可以理解成了就是省份的意思了。当然了,像北京啊,上海啊,这都属于这个直辖市了啊,它跟那个省呢,是同一个级别的,诶,所以这块呢,就是key呢,放的都算是叫省或者直辖市啊,当然呢,对于那个Y6呢,我这是放了一个四锥形的数组,那如果你要这个省的话呢,下边就列举出来了相应的一些这个市。哎,这样的一个情况。所以这块呢,当我们啊,一开始执行的时候呢,先把我们这里边儿的这个K,相当于是做了一个显示。显示完以后的话呢,你写一个,比如说河南的这个,我就选河南了,相当于我就接着找这个key对应的这个Y6了,找到河南对应的Y6这块呢,就给你展示出来。展示出来以后的话呢,你再选你所在这个城市选的是开封,然后这块呢,诶咱们就相当于形式上就看一下就行啊,就要登记完毕了。啊,你也可以考虑呢,把这个数据呢,就通过这个客户端的方式呢,发送给后台啊,也是可以的啊。
36:01
行,这呢,就我们做了一个效果,在这里边的话呢,如果用户输入的这个省份,比如呢,输入的是河南,结果呢,你选上一个,诶不对的啊,比如说山东山西是没有的,你写这个山西,那这块呢,就说输入错误,请重新输入,只有呢从这几个里边选才行,城市的话呢,也同样的道理。所以这呢,会涉及到一个循环的问题,OK。好,这呢,就我们想看到这样一个效果,那下边我们看怎么去做哈,那已经给的这个代码呢,咱们可以呢,直接拿过来用,这叫city map。我们可以呢,直接呢,再去生成一个比如叫c map的一个测试,哎这么着啊,把这个c map呢,咱就直接粘过来了。主要呢,就我们看一下如何去用它啊。哎,就这么着了,首先啊,这块我们分析一下啊,当我们去执行这个方法的时候,一上来先把咱们当前这个c map中的这样的一个属性,还是一个public static啊,直接拿这个类呢去调就行。哎,调完以后的话呢,我把它里边这个key做一个便利是吧。
37:01
哎,这是我们的第一个需求。哎,这能写一个一啊,相当于呢叫诶获取这个map。哎,然后呢,并便利哎map中的所有的这个key。或者叫便利,我们这个K级啊,OK啊,这个呢,算是咱们的第一步了。然后第二步的话呢,我们可以根据提示诶,获取一个从键盘获取一个字符串,然后这个字符串的话呢,我们看看在当前的这个K里边呢,有没有。啊,这样的情况啊,啊这块呢,就根据提示。诶从键盘获取这个咱们说叫这个省份是吧,这个省份的话呢,其实是呢,作为我们这个map里面的key出现的。呃,那也有可能你填的这个呢是不靠谱的,你写个山西没有那不行。啊,那这块我们得考虑一下,这怎么算叫有,怎么叫没有呢。啊,有同学可能会想到说map里边啊,我们当初有一个方法。哎,但map有个方法呢,叫key。
38:01
在这儿是吧。是否判断的有没有当尼的K,哎,如果要有的话呢,这就是个处,没有呢就是个false。哎,这呢是一种思路。啊,没问题啊,那建议的话呢,你要是有的话呢,后边呢,你还得去获取一下这个对应的value,其实还有一种思路怎么着呢,就我直接呢,去获取你相应的这个省份。是吧,对应的这个值得到的,这不就是Y6吗。哎,这个value呢,就是我们所谓的这个Y6值,就是你这个了啊,构成这个数组,你可以判断这个得到这个数组,这个value呢,它是不是存在的哈。它存在的话,那就是你上面填的是对的,不存在,那就你写的这个也不靠谱。是吧,哎,这个判断方式呢,也是比较多样的啊。好回过来,总之的话呢,根据提示从键盘呢,获取省份值。啊,然后呢,判断此省份是否存在啊,如果存在这个呢,我们就便利其。哎,其value中的。哎,是不是各个城市是吧?哎,如果不存在。
39:05
哎,那就提示用户重新输入啊。重新输入OK好了,那这块呢,如果你要是存在的话呢,我们就把这个,嗯,你Y6里边儿的词,锥形的数组里边的各个城市呢,就给你遍历一下。然后下边的话呢,又得是根据提示呢,从键盘获取城市啊。诶,从键盘获取城市啊,这个城市的话呢,这也是个字符串了,然后呢,我们不是已经拿到一个磁正形的一个数组了嘛,就是你对应的这个Y6了啊,那接下来的话呢,我们还得去便利这个四中形的数组,看看这里边呢,是不是包含咱们从键盘输入的这样的一个字串的这个城市。是吧,从键盘获取城市,然后呢,去便利咱们这个城,呃,这个各个城市构成的这个。四针形的数组。啊,然后呢,去判断。
40:01
哎,这个我们输入的这个城市呢,是否。诶,是否存在于啊此数组中。哎,数组中。啊OK啊说呢,如果存在。诶,如果存在呢,就意味着你写的是对的啊,咱们说那叫信息登记完毕。哎,那如果不存在。提示用户重新输入。这个呢,就是咱们对应的这样的几个需求了。OK啊,然后呢,咱们下边来写一写看看。首先呢,我们获取这个map啊,便利里边这个key map的话呢,在我们这个map里边作为一个,哎,我们是一个public权限的一个static声明的,我们直接呢给拿过来就行了。第二第二第二项我们这个叫model啊,然后我们啊来一个out加一个啊回车啊。
41:01
好,这呢是一个map了啊,这个我们用一个叫。嗯,就叫一个map吧。哎,接下来我们需要呢,取出它这里边儿的所有的这个key了啊,所以呢,我们就叫做这个key set。哎,这样啊,这个呢,对应的就是我们现在这个省份。省份怎么说来着?Province是这样不?是爱吗?哎,这个呢,你把不准的,咱们可以搜一下是吧。千万不要写成拼音啊。像这种词的话,这肯定是有这个非常明确的,诶写对了是吧。这个呢,就我们说的这个叫省份哈,下边的话呢,我们把它遍历一下,哎,呈现出来就可以了。这个话呢,咱们写成是迭代器啊,增强for啊都行啊,写成for吧。这呢我们是object,这个呢叫。是吧,冒号啊,Provinces进去。这里边就直接打印了啊pro,嗯,Pronce这块的话呢,它是写到一行了,所以这换行那就不要了。
42:03
然后这个打印一个以后呢,跟下边一个呢,中间有点间隙啊,比如来两个制表符这样的效果来先走起。诶这样呢就出来了啊,这呢对应的我们上面这样一个效果,接下来的话呢,说请选择你所在的省份啊,这个话呢,我们说呢,因为涉及到一个循环的问题了。嗯,因为你要输入不正确的话,还得循环输入了,所以直接咱们就上这个循环了啊。哎,我要出一下。哎,在这里边呢,就写一下说请选择。你所在的这个省份啊好,接下来的话呢,你就开始呢去写,写的话呢,使用scanner提前呢造出来这个咱们就放到这个位置吧。哎,你有一个scanner。stem.in。诶,没问题啊好,Scanner有了以后呢,哎,别忘了给它关,所以咱们就提前呢,把它先关了吧。哎,先这么着一下。
43:00
呃,这块呢,提示呢,就是它well处出不来是吧,诶所以呢,执行不到一会儿呢,处理完以后呢就好了啊呃,请选呢你所在的省份,呃通过SKY呢,我们去调一个叫next类方法,那获取一个字串,哎类型的啊这个呢,就作为我们这个省份出现了啊province。好,这是我们输入的一个,那输入的这个的话呢,刚才我们提到了,说有可能不靠谱是吧。啊,靠谱的话呢,继续操作,不靠谱的话呢,这个呢就得重新输入了,这个呢,我们先来判断一下怎么叫不靠谱呢。对,刚才我们提到过一种思路啊,一个呢,就我们用这个contain key是吧,把这个province你放进去看它返回值,如果呢是false说明就不存在了。但这个你判断完以后呢,我们还得去找,如果要存在还得找它下边这个Y6值是吧,干脆呢,我们就无这样再去判断它了,直接呢,我们就调这个钙的方法了。我们就把这个province就放进去,这样的话呢,如果你要是存在哎,就能返回你对应的这个string型的一个数组,叫cities是吧。
44:02
哎,这个你注意呢,咱们这个英语里边呢,这个city。啊,别加一个S是吧。是稍微有点low了,这个得变Y为I加ES是吧?这上初中时候讲的啊。好,这个呢,就是复数的意思了,这个呢为什么报错呢。啊,因为这块呢,我们get一个key是object类型,返回的Y也是object,咱们自己知道呢,是string类型的数组是吧,所以这块我们给大家直接就做转了啊。好,那这样的话呢,我们就得到呢,这个相当于Y6了啊,相当于是得到。来获取这个省份对应的各个城市构成的。哎,这个死针类型的一个数组。哎,这样子啊,但是这块的话呢,我们说呢,有可能你填的这个省份呢,是不靠谱的啊,那其实呢,就意味着我们得到的这个cities呢,判断一下啊。那如果呢,这个K呢,要不存在的,相当于我们得到这个value,是不是就也不存在了。
45:01
比如说你可能是个闹了,哎,你要是个闹的话呢,这个我们就说呢,你输入的省份有误,请重新输入啊。哎,请重新输入。OK,这呢就给用户的一个提示。啊,在我们这个题目当中,其实就是闹了啊呃,那我多说一句啊,在我们这个题呢,你要说的key不存在,它是闹,在有一些题目当中呢,他可能不是以这种闹的方式呈现的。那会以什么方式呈现呢?就是我找这个值的时候呢,不存在这个所谓的不存在呢,是我也给你返回了,这个也不是个no,它呢是有可能是这种情况。怎么着呢,就是你这个得到这个数组的lengths呢是零。哎,这个大家注意一下。嗯,你比如说我们有几个元素构成一个数组返回,那要是找到了呢,你就返回这个数组没找到,哎,关键就是没找到怎么来刻画,有的时候呢,我们所谓的没找到呢,就是返回个no了,有的时候呢,说没找到啊也返回了,它返回的呢,这个数组还给你创建了,只不过呢,这个数组的元素是零个。
46:04
啊,这个大家小心一点啊,咱们这道题当中呢,其实这个呢是可以不加的,但有的题目当中呢,你注意它可能不是no,而是呢长度为零啊,这个小心一点,所以呢,两种情况都有可能呢,哎,我们加一个或啊。诶,这个题的话呢,其实不加他是行,我就加上吧,啊让大家有这样的一个理解啊。好,那这个时候的话呢,你就需要呢,重新的再去进入这个well处再走了,那就意味着如果你要不是no呢,咱们在这块呢,来个else,我这儿呢加个break。那这呢,就跳出咱们这个while的循环了,那就意味着就是用户呢,写的这个省份呢,它是靠谱的,他就出去了。啊,这个在这儿写一下啊,这呢意味着用户输入的。那这个省份啊是存在的啊,则跳出当前循环。好,那跳出单元循环的话呢,我们就跑到这儿来了。哎,那就意味着我们现在呢,把这个省份对应的这个城市呢,我们就找到了啊,当然到这儿的话呢,我们已经看不到这个变量了,是吧。
47:06
现在咱不是想便利他吗?看不到了啊,看不到怎么办呢?拉到外边是吧。哎,我们就把它放到这个位置。哎,我就这样。写一下把这个呢,我们声明呢,就给它删掉了。那就这样行,因为呢,这个位置呢,不用赋值了啊,因为你进去的话呢,肯定会给它赋个值的,哪怕你复个no也行是吧,所以呢,这块呢就可以不用再去赋值了。诶,大家在写代码的时候呢,你可能说,诶怎么一到这块呢,上来就来一个死轮形的一个数组,有点懵是吧?诶这块你注意你看写的时候呢,我也是先写到里边,后来呢发现不行再拿出来的。啊行,那么回到这儿呢,就意味着我们现在找到了你对应这个省份,对应这个城市了,下边呢,我们得需要呢,有一个这块其实多一个便利的操作了啊,这个呢比较简单,咱可以使用一个一般的for循环都可以啊。好久没用了,那咱们写一写啊,For in I呢等于零,I呢小于啊,city.length。
48:01
哎,佳佳。啊,在这儿啊,打印一下cities。哎,这块呢,同样的道理,不要换行。哎,在这个位置呢,连接一下,诶指标符是吧。好,那这样话呢,咱们就把这个需求呢,就做好了。哎,做好以后啊呢,你说哎想看看效果,来咱们那就先跑一下啊。这块呢,没有换行是吧。我们需要呢?在这是province,请输入所在的省份。哎,比如说在这个位置吧,咱们直接就给他补一个得了。这么着啊,重来。哎,这样啊,所以呢,请选择你所在的省份,来了一个这个叫诶山西。没有是吧,啊,这个陕北陕北没这个省陕西啊。陕西啊也没有是吧,这个呢,就得是重新输入了,嗯,那我们来一个比如说辽宁。啊,辽宁A走好,那这时候呢,就把这个辽宁下边对应的这个地级市呢,就给列出来了。
49:05
诶,OK,没问题啊啊,这个列完以后呢,接下来我们就看这个需求了,说请选择你所在的城市,这个呢跟上面这个省份的逻辑呢类似,所以呢也得放在一个。哎,While循环当中。这呢,我们也写成这个出了。请选择你所在的城市,哎,这么着。嗯,这个呢,跟我们上面呢,有同样的问题哈,这个也没有画好啊,所以呢,我要是写的话写到这儿,那写这的话呢,通过刚才这样看,每次呢这块它都是。诶这块空一下是吧,啊,你要觉得说能接受,那就这样整啊,你要觉得说看着有点不好看,不好看,那你就别写到这儿了,你就前面呢,加一个输出语句,让它是个换行的效果也行是吧。哎,就这意思呗。哎,我们在这儿直接呢,就换行一下就行。好,这块呢,这样来处理。诶,请选择你所在的城市,拿着这个干点,诶,Next方法。
50:02
哎,咱们呢,获取一个磁针形的,哎,你写了一个CT了。哎,下边的话呢,我们需要看一下这个C呢,这个靠不靠谱儿。这个怎么算靠谱,怎么算不靠谱啊?是吧,你不能写错啊,比如说这个呢,河南为例啊,这个南洋啊,南洋你不能写个北洋是吧。这没有。啊,写个邯郸,这也不在河南。啊,这个你要写错的话呢,还得重新输入。呃,写个开封在这个,我们怎么判断呢,在不在呢。啊,跟上边方法差不多有点区别啊,咱们现在这个数据呢,是不是已经是在死顿型的数组里了,而上边这块你是在map里边是吧。嗯。哎,其实呢,你看这块就看大家这种整合代码的能力了啊,相关的一些方法呀,API啊,咱们基本的该测的都测过了,现在就看一下,遇到一个具体需求了,你怎么去拿你手里边这些工具来用了啊。
51:02
这不就是一个数组吗?我就看数字里边有没有某个元素,这就循环一下,看看有没有不得了吗。是吧,直接放循环就可以了啊。换循环的话呢,比如说啊,In一个I呢等于零,I呢就小于咱们的点length。啊,爱加加,然后过来以后的话呢,我们就依一下啊,你这呢写的叫city嘛,哎,我们就equals判断一下,哎,City city。啊里边呢,把这哎往这一放,这呢就相当于找到了是吧。诶找到的话呢,这块我们做一个操作,如果呢,一顿执行,把这个for循环都执行完了。也没找到。那就说明你输入的有问题是吧。哎,那就得这个重新的再去输入了。啊,那这块呢,稍微有点问题了,看怎么处理。这呢,就意味着我们找到了啊。找到的话呢,这个呢,我们可以写一句话,这个呢叫信息登记完毕。没问题是吧。
52:01
信息登记完毕了,其实就该结束了。就没有必要呢,再去这里边儿呢,比如我们写开封第三个元素就找到了。那这块呢,我们其实这个循环就不用执行了,是吧。这个呢,可能会想到一个break。但是这个break的话,你结束的是这个for循环。接受这个for了。那这块呢,是不是还可能会让我们在那就意味着我其实还会走到这儿是吧。走到这其实没必要了,是吧?怎么办?对,加上标签得了。这个咱们其实以前没怎么用过这个事儿是吧。哎,处理方案呢,其实有多种啊,这个比较省事的话呢,直接我就加个标签,我就直接来个得了。咱们讲这个break continue的时候呢,其实提到过这个标签,只不过咱们在代码里边很少用啊。为啥这块要加标签呢?因为里边你就自己整了个for循环嘛。哎,就这么个逻辑啊,好,Break和L就是一旦呢,我这块登记完毕了,我break呢,不光结束你了,我直接把外边这L这个L对应的这个L处也给结束了。
53:06
啊,就这样啊,那要是能够走到这儿呢。实际上就意味着你不是通过if进去结束的。是这个结束的,其实就意味着是不是没找到。那这块呢,你就说。哎,说。嗯,输入的。哎,这个,哎城市有误是吧?哎,请重新输入。好,那这块呢,再翻到这儿呢,你再重新输入呢就可以了。哎,就这样来处理来跑一下啊。哎,瘦这块呢,咱们已经考虑过了,所以咱就写个正常的,比如说哎河南是吧。哎,说呢,请选择你所在的城市,这块就列出来了,咱们来一个就是邯郸吧。诶承认有误,请重新输入来一个这个石家庄是吧。国际庄是吧?啊也不行啊好,那这块呢,都不在这个河南啊,来一个南阳。
54:05
这个南阳的话呢,呃,最早我记得带过一个学生啊,我说哪儿,他说南阳这个。南阳理工的哈,当然我第一反应是新加坡的那个。啊,我说哎,你好学校啊,他说也就一般吧,我说不是挺好吗?是吧,然后不是一个南洋啊。嗯。哎,这个就登记完毕了啊。好,那这个呢,我们题目就结束了。那就这个啊。好这块呢,我再多说一句啊,可能有的同学呢说,诶这个我有点搞不定啊,想不到,想不到的话呢,也可以不这样做。我抛一个思路啊。咱们现在不就是想判断一下当前这个,呃,死锥形速度里边有没有当前这个,你写的这个CT嘛,是吧,你把它做成一个方法也行。哎,做个方法呢,你专门就判断一下,比如说方法传入的参数呢。举个例子啊,比如说public沃尔类型的。这个呢,你可以呢,就叫做哎cons city就叫它,然后这个位置,你把这个死string型的,咱不是有个叫city是吧,再把你这个死针形的,你自己写了个CT放到这儿。
55:12
这么着,然后你自己在这块写一个for循环放到这儿。然后呢,一旦呢,找到了你就return true。没找到。是吧,就是把这个相当于for循环呢,你给写到这儿了。写到这以后呢,你回过来呢,这块就直接掉了一个方法是吧,你往里边一放,看找到了没,找到了这不也行吗。是吧,就避开了我们这呢,用了一个带标签的这种情况了。啊,这个带标签呢,这个用法呢,实际上是还挺好,但是呢,大家可能有的不太熟悉是吧。OK吧?嗯,写一下得了,写一下吧,第二种方式啊。哎,第二种方式来处理这个城市是否存在这意思,哎,在这儿呢,不就是还是做这个事儿吗。哎,我把这个呢,先CTRLC咱们粘一下啊,这个我就先处理掉了。
56:03
放到这儿。嗯,然后过来啊,这个位置呢,咱们就叫return一个true吧。这条角return处,然后呢,诶在这个for完了以后,我这return false没问题吧。你要是进去了,那肯定是就出去了,只要呢,你执行到这儿,肯定是你当初没有进去过if,那肯定就是force了,好把这个方法呢,咱们为了方便掉呢,咱也加上static吧。好,然后呢,这个方法CTRLC,咱们回到这儿是吧。嗯,回到在这儿吧。这个咱们看作呢,叫方式一哈。哎,这样写,然后这块我们写一个叫诶方式二。哎,这样把这个呢,咱们也给它移到这个。上边这块啊是方式一里的好放这儿这块我们就直接调呢,刚才提到的这个方法TRC。哎,往这一放,然后把咱们的这个CT往这一放,C往这一放,这个呢,这就咱们自己写的了啊,它呢就返回一个布尔的值。
57:05
嗯,If,我们把这一放。这样子吧,这业务就包起来了啊,这样就相当于是你找到这个城市了。他是个处这块,你就写一个叫。哎,信息。哎,登记完毕是吧。哎,这样就行了,然后呢,这个呢叫信息登记完毕,如果你要是没有找到。反正是个force是吧,这个我是都在这里边都找了一遍了啊,没找着没找着的话呢,诶我写个else吧。这个位置我就写一个输入语句,说那叫输入的程序有误,请重新输入。这样可以吧。诶,信息登记完具加个break,对这块呢,因为我们外边有一个。哎,有一个处是吧。哎,这样啊好,那如果我这块我加了个break了,我说啊,其实我这个else呢,我可写可不写了。啊,因为你要执行的话,不就走了嘛,是吧。
58:00
哎,OK啊行,来,我们把这个呢再run一下。好省份来一个,哎,辽宁是吧。那那请输入你所在的这个城市,这个大连。哎哎,别大连,这个大连就结束了哈,这呢就没找着来一个,诶这个再来一个长春。没有是吧,然后呢,再来一个叫刚才营口。哎,这不就找着了吗?没问题是吧。行,这样写也行啊。这个好多人呢,知道东北应该有三个省是吧。这我觉得这是常识的啊,但是我跟一些人接触,发现他们东北就知道是哪儿的,东北的。东北的没了,他说你说是哪的,辽宁,辽宁的是吧,辽宁在哪儿呢?东北的啊,东北的啊,他以为东北就一个省啊。啊,但是因为平时咱们说的话呢,一般也都这样说哈,说你哪儿的东北的。啊,一般也很少说我是黑龙江的呀,我是辽宁的呀,可能说的就不那么细了啊,但是你要说咱们在这个江苏这儿住,说你哪的,你说我是华东的是吧。
59:05
华东的是什么呀,是吧,就很奇怪啊。啊,潜意识当中大家把东北呢,可能当成一块地儿了啊。行,这呢,就是咱们这个第二道题啊,那以这两道题为例呢,咱们就练了练这个map的使用,哎,大家呢,也下来写一写。
我来说两句