00:00
好,那今天呢,咱们出的这几道问题呢,主体上都还是来考察大家这一个关于泛型的使用的,呃,涉及到这样的几个,哎,我们在集合当中去用泛型,呃集合的话呢,不管是接口也好,还是具体的实现类也好,诶我们看到呢,它都改成诶泛型这样的一个声明了,那所以呢,咱们在开发当中,大家用到集合的时候,呃也是,呃这个建议大家都是用上泛型啊,就用上泛型哈,当然了建议那就说明呢,就是你要是不用泛型呢,也是可以的,咱们前面讲这个泛刑之前,哎,在结合这一章,咱们就没有用泛刑,哎没有用泛刑是什么样子的,用泛刑是什么样子的,哎这个呢得清楚啊,这个得清楚,好,那我们来看看这几道问题啊,这里边呢,涉及到一些代码,CTRLC一下这个咱们就新建一个这个TST在这里边来写了,你看这个D08行在这写呢,呃,格式上看着呢,稍微好一点啊,因为放到咱们这个word里边呢,这个字呢,有时候大啊小啊啥的啊,在这里边写了。
01:00
说第一个说如何遍利map中的K级Y6级和KY6级,这个呢,其实咱咱们在咱们讲这个发型之前呢,也考过大家这个事儿了啊,这个呢需要大家掌握,呃,我们说呢,在开发当中,关于这个数据很多数据的存储在内存层面,咱们呢用list和map呢是最多的啊,那么map中你把数据它是一个容器哈,把数据呢放到它这里边,那回头呢,在另外一个场景当中呢,咱们就要给它取出来啊,取的话呢,对于map来讲,那就是一个K一个V啊,一个K一个Y6。那这种取的话呢,其实就相当于是在做一个便利操作啊,这个呢是需要大家掌握的,那现在呢,要求就是用上发型以后啊,它是什么样子的,这个也得会啊呃,这呢提前呢,这个map呢,对象已经有了啊,你要前面一开始想写上,那你就得写上一个map这个键值,这个大家呢写的话呢,就是自由定义就可以啊,没有强制要求了啊,比如说呢,这个键我们写成一个string值呢,你也可以写个string,或者呢,我这换一个类型啊,就换成一个integer,比如说。
02:05
这要注意就是咱们这个Y6啊,当然这个K也是一样,能写成int吗?不能对咱们讲这个知识点的时候说过,就是我们这个泛型的话呢,是一个类类型的,那咱们说基本属于类型,不是一个类了,所以呢,你要用也得用包装类啊,哎,我们去new一个,比如说哈希map后边这个位置的话呢,在这个7.0的时候呢,你可以不用写了,写上一个监控号就可以了,那你要补上的话呢,也补上这个这个对应的啊,String和inte。这是这样一个情况,首先呢,有我们这样一个对象的声明,然后呢,你后续呢,有一系列这个铺的方法啊这块呢就不多说了,那接下来呢,我们重心呢,是在做这个便利,哎map点便利key调的方法是哎k set,哎调的是k set,那返回的呢是一个set吧,那这里边呢,我们加上泛型了什么类型,对四肢类型,那这呢,我们就是一个K构成的一个set,成这呢就是拿到这个set了,那接下来的话呢,我们对这个set呢,需要进行遍历,遍历的话呢,这没有要求说你用这个迭代器还是用这个增强方循环,这个你写哪个呢都可以。
03:20
哎,现在都可以,你要说省点事的话呢,其实写这个增强for呢,格式上稍微简洁一些啊,那写这for这里边就是string呗,啊之后写成key,然后呢叫key set,哎,就这么着啊,在这里边啊,我们system。system.out点哎print LA,哎这里边你把这个key呢输出一下就行,咱们这呢只是做一个输出,哎在开发当中呢,可能不是输出了,需要你做一个,比如说给某个对象的一个属性去设置值啊等等啊这个时候呢是哎那样的一些操作,这呢咱们就简单的去看一下它的值就OK了啊这是呢叫便利key。
04:01
遍利这个key啊,那遍利Y6呢,其实类似啊,遍利这个Y6这个机啊,是类似的,还是拿这个ma那调的那方法呢,得记着什么呀,对values,那返回值类型呢,是不是collection啊,哎,Collection那这块呢,也有泛型,所以也得写上啊,这张叫in。啊应,然后呢,不妨我就叫做Y6了,行,这样的话呢,我们就得到一个Y64啊,所有的Y6构成的一个集合,那接下来呢,还是对这个集合进行一个便利了,咱们换一个,比如用这个迭代器哈,Y64点啊eator这个方法,这个方法的话呢,就会返回一个叫ter的对象,这个呢也有泛型,所以你得加上这呢写成inte。对,然后呢,诶,我们不妨呢也叫做E特了,行,这就得到这个迭代器的对象了,下边呢,进行一个便利,那这个呢,大家应该都写的比较熟了,第2HAS next就是能够手写代码呢,这个是需要大家这个功底的啊,至少的话呢,你在我们这个编译器当中呢,呃,一边呢使用提示一边写,这个呢,你最起码得达到像这些常见的这个代码量,呃,代码的话呢,一定要会写啊,嗯,行,然后再接下来的话呢,你对它这个值呢,进行一个获取是吧?第二啊,调这个next的方法啊,行,那此时呢,我们调这个ne方法,它返回值的类型是什么?
05:34
是不是就inte啊,咱们建利呢,现在呢,遍利的是所有的value啊,Value呢是inte类型,所以这个ne呢,它不再是一个object类型了,因为这块你也用上泛型了,所以呢,呃,就是你要看我们源码的话呢,就是呢,它的声明处这写的是个E,哎,然后这个next方法的返回值类型那块也是个E,哎到我们这块呢,指明是inte的时候,它这个next呢,相当于它也确定了一个E,就是inte。
06:02
哎,就仅此这样啊,行,这是便利key,便利VALUE6,便利这个k value6。哎,这个来讲的话呢,就更难一些,尤其呢,你是用这个迭代器写的,呃,是用迭代器写的话呢,这个就更复杂一些啊,这个咱们把这个呢再写一下,其实带着大家写过了啊,咱们上课时候哎map点哎我们呢说过有两种方式去遍历,一种呢,就是还是这种是吧?哎,然后呢,你在这里边拿到这个K了,再通过map呢去get一下这个key,哎,就找到那个VALUE6了啊那种我们就不说了,说一下这个叫entry set的方式,调它的entry set方法,首先得到的是一个set,然后set里边放在呢是什么呀?是NTRY是吧,只过这N呢,是咱们这个map中的内部一个接口了,所以我们这个用map点一下了啊叫entry,那entry呢,这个还不能这样写,它里边也有泛型是吧,所以这就叫泛型的前套,那这怎么写string哎。
07:09
对啊,咱们说了这个map呢,其实本质上来讲啊,它存的呢,也是一个一个的数据啊,就是一个一个的entry。只不过呢是这个entry呢,它有两个属性啊,一个呢叫key,一个呢叫value,所以呢,我们如果你忽略掉这个entry这一层,相当于说map里边存放的是key value6啊,其实呢是一个一个的NT垂,那么相当于这个N垂的这个泛型,前边一个跟后边一个分别指的就是我们这个map东K和Y6的类型啊,这个要注意一下,那接收一为我们不妨呢就叫做N锤了。哎,就这样了啊,那拿到这entry以后,接下来咱们呢,使用一下这个叫迭代器了,嗯,这个叫entry entr entr set吧,这样啊,哎,行eterator掉了一个方法,这个方法呢,仍然返回的是一个eterator,好,那下边呢,还是这个事,这个怎么写?哎,对,又是map.ent哎里边呢还是这个string in,哎这个呢,我们还叫做这样写啊,就这块呢,大家不要去死记硬背,说呢,哎呀,这里边interpret里边是map.entri死记,记下来背下来没有意义啊,就是今天你记得明天可能就忘了啊,你得真正的去理解啊,以及呢,后边如果我们见到说多个前套,咱们讲泛型的时候呢,最后关于的一个应用举例,哎,第一个,哎,我在这个PPT里边有那个代码啊,哎,那里边呢还套了三层,哎,这个呢,关键呢,其实不是说套几层你能够理解。
08:46
啊,这个更重要一些啊,E turn呢,你像上边一样啊,就是看你主要便利的这个集合是元素是什么类型的啊,你上边呢,便利元素是in,所以这就是in啊,我这呢,便利的是entry set啊,里边呢都是entry,所以呢我们就是entry,只不过呢,Entry呢,它又指明了它的一个呃,泛型而已啊,潜逃了好,那么接下来还是一个while itter。
09:14
呃,点啊has next哎这么着,然后在这里边呢,我们先来获取它的entry点啊,这个呢叫next方法得到的是entry,那就是map点啊entry这个我们就叫做entry吧,哎,这个前面还得加上泛型,哎,String这的。哎,这个呢,比如就叫做entry,哎就成这样了。好,这样的话呢,我们就得到啊,这个你变历的时候呢,这个元素啊,元素不就是map.entry吗?哎,就是一个一个entry就看到了,哎看到以后的话呢,我们就直接呢去输出一下,诶它这里边entry中的key和value啊,比如entry咱们去get它的或者这样吧,主要呢,想体现一下这个类型哈,我这样单独的拿出来盖写一下它的key,这是它这个方法,哎这呢就是一个词轮型啊,哎这样子啊,然后接着呢,获取它的value,哎,Inte类型,哎entry.get一个value,哎主要呢,呃,想让大家看到这个类型这块啊后边这块呢,我们就直接呢,比如说你这个K,哎这个呢,咱们就哎指向一下就完事啊哎加上一个value,好,这个呢,就是咱们这里边的一个关于k value和k value6的一个便历,用上泛型以后怎么写,就是刚才我写的这个代码,大家呢,需要能够写出来。
10:46
啊,我看有同学呢,写了个一点,然后呢,就下边二点了,呃,这个要会写啊,这个呢,咱们过了一个周末就明显感觉呢,这个不如说昨天讲的话呢,今天再让大家写要熟一些,那说明呢,很多都忘了啊呃,大家呢,现在呢,就是过了个周末的时候呢,咱们说过啊,周六晚上没有晚自习,周日呢,上午下午晚上这一共算是四个半天啊,这四个半天里边最起码得有两个半天,最起码啊两个半天呢,你得是在学习状态的啊,就是现在呢,咱们讲这个知识每天都是新的啊,大家呢,这个学习的这个新知识呢,其实你都在都是写在这个内存里的啊,一掉电就没了是吧,一掉电呢,就比如说你睡了一觉可能就没有了啊,所以这块呢,你得呃不断的去复习,去强化强化强化强化是吧,呃,写到你这个脑袋里边,然后回头呢,它掉电的时候呢,也忘不了啊,你得持有化起来才行啊,所以得不断的去写才行,才能强化下来啊成。
11:47
嗯,这是我们说的这个第一道问题,然后第二道题,这呢是让遍历这个list了啊,这个呢我就不写了啊,这我就不写了,这道题的话呢,咱们呃,上课的时候呢,也说过啊,在例史当中去使用,只不过咱们讲的时候呢,是讲的那个添加啊,以及呢再去获取啊,这块呢是让写便利啊,有上面这个经验以后呢,其实大家写啊,应该难度也不大。
12:13
啊,那么后续后续咱们在使用集合的时候呢,大家呢,哎,都要考虑用上反型啊,就要这样啊好再下一个,我们看这个第三个题,说第三个题提供一个方法,用于便利获取map中的所有value啊,并把它存放在例当中,考虑上几各种反应的使用。这个是咱们上课讲过的一个练习中的一个方法,能记得不对啊这个呢,呃,当时这咱们讲的时候呢,有些同学呢,这不是写的,或者咱们说的一种错误写法,有些同学呢,可能不是特别理解,哎咱们把这个呢就说了说哎在这个do这块,哎do里边呢,咱们有一个方法不就是它吗?哎,错误的写法呢,有同学呢,直接呢就是map.enr得到一个collection,直接呢强转,这个呢,注意是错误的,哎一定要注意这是错误的啊这个呢就是呃这个解释的话呢,那就是咱们面向对象的一个解释了,用面向对象去解释。
13:15
啊,这个咱们已经说过了,所以说呢,咱们,呃,后续讲的Java基础这个高级部分呢,其实都是基于面向对象的啊,只是说呢,我们考虑到说怎么去创建多个线程啊,诶,我们用到thread这个类啊,调用它里边的一些方法啊,那咱们呢,就是去熟悉这个类,熟悉这里的方法,说呢,还可以用reable,还可以用comparable,还可以用先程词,OK,那我们就去熟悉一下这些接口,哎,熟悉它里边的常用方法,熟悉呢该怎么去写,哎去,所以说呢,我们这个高级部分,其实说的直白一点,就是看要完成什么事,然后呢,提供了哪些API,接下来我们如何去使用这些API啊,其实就是这样的一个套路,那整个这个过程当中涉及到怎么去调啊,这个值怎么去执行啊,哎,这块呢,都是用面向对象呢来解释的啊行,那这个题目的话呢,这个要大家写的话呢,也是参照我们这个方法就可以,哎,让你写的其实也是这样个方法。
14:15
嗯,我们呢,专门造一个release,接着呢去便利我们map中的这个value。诶,然后呢,通过这我用的增强for了,你也可以用迭代器,诶把这个数据呢,一个一个取出来,放到我们的list当中来做一个返回啊,做一个返回,那这里边的话呢,呃,这已经明确说了,我们这个呢是叫string string啊,String string,所以这块呢,大家写的时候就别像这样,就非得写成个T了啊这呢就没有必要写成T了,哎,这个我写到这了,写这啊,哎,所以这块呢,你写这个方法的时候呢,我们看一下啊方法的声明,比如说public返回的是一个value构成的list啊,这个value呢是string,所以你这也是string,那叫get,比如我就要values了啊,或者叫get value list。
15:07
嗯,这个你自己起个名就行啊,表示呢,我们所有的value构成的一个list行,那行参部分这个呢,没有说啊,那你这块呢,你可以就给它传进来一个叫哈希map也可以啊哈,Map呢,如果你这块写死了,那就表示我只能够是放一个键值都是string的map。注意你看我这个写的这个实际上是关系很强的啊,咱们后边讲这个泛型在继承上的体现的时候,你像我这种类型写的就非常强了,我是不是就没办法放一些,比如说我这个map呢,是哈希map这个位置呢,哎,我写的string后边呢,写的是integer啥的。像这样的一个map能够作为这个参数传递到这吗?不行吧,不行啊,即使呢,比如我这个string,我不是string了,呃,这比如第一个是string啊,我第二个呢,形成object了,说object这不是in类吗?那这样行不?哎也是不行的,对这咱们讲过哈,说这这个时候呢,在泛型这块呢,是什么类型,它就是什么类型,没有这种子负类关系啊,你要说想让它有子浮类关系懂么?你这是不是占位符可以啊哎,这时候它识别为是你这个的算是一个父类了啊诶这个要小心一点成那这个题目当中呢,咱们就是针对于这个类型来的,所以呢,我这这样去传了啊,那在里边写的话呢,就类似于我们刚才说的这个逻辑了啊,类似于咱们刚才说这个逻辑,那不妨我这块写的简洁的给大家写一下啊啊values这样一调,取出我们所有的这个呃,Value构成的一个collection,啊,显然呢,就是一个string类型。
16:52
啊,这个我们就叫values,好,那得到它以后,哎,我们用这个增加for法,哎,稍微比较简洁一些啊string,然后呢,就叫value values。
17:04
好这样,那接着在里边啊,我们说需要一个list了,来string,那这呢,我写一个叫value list吧,那去new一个a list,那这样子,那这呢我就不写了啊呃,这个位置呢,你写成list也行,写成a list呢也可以,这个是小事,然后CTRLC啊CTRLV在它里边,我们去添加所有的value,诶这是不是就搞定了,最后呢,只需要做一个return OK。就这样写。哎,这个呢,只不是跟咱们客户的讲的这个练习题啊,其其实是一样的啊,只不过呢,这块呢是咱们用的类的泛型,没有指命题是什么,这块呢,明确说了是一个死string类型啊,仅此而已啊行,没问题吧,哎,这块呢,你用这个迭代器也可以,迭代器呢,只不过这代码的话呢,你就多一行,其实是啊,因为在上面你先得获取这个迭代器来注意,迭代器呢,也用上这个泛型啊OK,过了下一个说创建一个与a.TST文件在同目录下的另外一个文件b.TST。
18:18
那以后呢,不排除我们会做这样的这个事情。嗯,我们呢,呃,比如举个简单道理啊,比如说这个我们存储像手机也行啊,所当然有一个,呃具体的一个APP呢,它其实都会对应着一个存储的一个目录了,持有化层面的啊,那我们就可以获取,呃,比如说你这个APP下呢,呃对应的一个默认的目录下边有个文件了,我现在呢,想在它的一个同目录下呢,再创建一个文件啊,这个时候呢,你就可以获取它的一个啊,它所在的目录是吧,然后呢,你在目录下面再创建另外一个文件。哎,这样就可以了啊,哎,相对应的这个APP,每个APP它所对应的这个默认的存储路径啊,其实也可以去获取啊,调方法获取就可以了,行这个不难吧。
19:05
这呢,比如我们叫filee,那你就new一个file,那这呢,你先模拟出来我们这个a.TT这个文件在哪啊,这个你随便写个地址就可以了啊,比如说是A目录下的叫a.T这个呢,涉及到我们这个路径分隔符。啊,注意一下Windows里边呢,这个这样写斜杠啊,那再来一个斜杠呢,就是防止它前这个表示成一个整个一个字符了,是吧,加上斜杠转移一下啊,那么跟它在同目录的。怎么写?哎,我们file1.get的parent,这不就获取到它的这个D冒号导A了,然后在这个目录下呢,再创建一个B,这个呢,直接用另外的一个构造器。哎,这里边啊,首先呢,把这个写上,在这个目录下,我们再去创建B点,哎,TST就这样呗,没问题吧,嗯,这个大家写的时候呢,要注意一下啊,其实基本上就是关于这个构造器的一个使用啊,咱们讲过三个构造器,一会儿复习的时候说一下这三个的话呢,这个我们可能都会用得到啊,看具体的这个情境啊,嗯,那后一个呢,这个也不太困难啊,就是增。
20:34
哎增删改,哎插插入有吗?没有啊,长度电力就这几个啊增。不得呗,哎,这是某一个啊,这个K类型的啊,Y6啊,V类型的一个V啊,这个方法这是用范权的一种表示了啊KV呢,取决于你这个声明的时候呢,KV删remove啊的话呢,根据你这个K把我们这个建轴删掉啊,然后反复质类型呢,还是我们这个V是吧。
21:08
啊,V类型的啊,然后修改,对还是这个put哎,不多说了啊查询哎,Get get,我们这个K类型的这个K返回的就是V类型的一个V长度size,哎返回呢,就是键值对的个数一共呢有多少对啊然后便利便利咱们这个第一个这不是写了啊对,就是涉及到哎刚才说的这几个方法啊,这是一个。哎,这是一个啊,这是一个好这呢,我们这个又把这个集合关于泛型这块结合以后啊又多说了,说这个事情,那这块呢,是考察我们说这个L流的一个file这个类的一个基本使用啊行,那这块呢就完事了啊这里边呢,涉及到的你看哪道题写的不好呢,需要大家下来呢再去写一写,呃,代码量呢,稍微多一些,今天的啊,但是呢,这都是比较基本的问题,需要大家掌握。
我来说两句