00:00
大家好,我是海波老师,Java的集合语法我们给大家已经介绍完了,那么接下来呢,我们给大家总结一下Java集合中可能出现的一些异常啊,我们这里呢,来拷贝。然后呢,写上我们的13,然后呢,把这个去掉,我们叫exception,然后点击OK,点击完成以后,把里面的东西咱们全都给它去掉就可以了,好了,去掉完成以后,我这里就写上它,我们叫做异常。那么写完之后呢,我们先给大家演示什么呢?我们就先给大家演示第一个我们的a list,来我们a list,然后呢,我们写上它等于new,咱们叫a list。那我们先给大家演示的就是容量的一个概念,什么叫做容量的概念呢?这里我们给大家解释一下,首先我们的release它是可以传参数的,所以我们这里说一下咱们叫做容量。但这个容量啊,你能随便传吗?对不对,举个例子,我传一个零行不行。你说你要传个十吧,没问题,而且咱们a list它默认的容量它就是十,那么现在我给个零可不可以呢?其实应该是没有问题的同学们来运行。
01:06
运行以后我们来看一看。大家会发现我们这里不会出现任何的错误,对不对,但是如果你给它一个负一呢,我们现在运行一下,看看结果,运行之后你就会发现我们当前的这个地方是有问题的,为什么呢?叫做非法的参数异常,这就说明你当前的容量不能小于零啊。诶,你等于零可以,你小于零是不允许的,对不对,哎,就是这个道理,所以这是我们说一下不能小于零对吧?哎,就是这个意思,好了,我这里改回去,我给它个十,我给他个十,以后同学们我再来写上list的点,我们增加我们叫做A,对吧,然后呢,写上它。好了,同学们,我再写上一个B,我再写上一个C行,现在呢,我list的点我的get,我们给他一个四。同学们,什么意思啊?咱们这叫索引啊。现在我叫索引的话,现在呢,我就运行一下我们得到的结果,来我们点一下叫做他来我们这里点击右键执行一下,执行以后你会发现我们当前的结果是不对的,它会发生错误,它为什么会发生错误呢?同学们,很简单,是因为超过了我们索引的范围,老师不对呀,你不说了吗?咱们现在容量是十吗?如果是十的话,它的索引范围不是零到九吗?
02:25
记住同学们,我们这个有点不太一样,咱们如果是直接是宿主的话,咱们这么做是没问题的。记住,如果访问的集合它是我们的宿主,那么咱们所引的范围就是零到数组长度减一,对吧,这是我的宿主,但是如果我们访问的集合呢,是我们的list这样的东西,那么它的索引范围就是零到数据的长度减一,不是数组的长度了,是我们的数据的长度。大家看一下长度为123123减去一不就是二吗?所以说你写个二没问题,你运行,你运行以后这个是肯定可以的,但是你超过这个范围那就不行了,比方说012,你写个三肯定就报错了,对不对,诶就是这么个意思,所以啊这个呢,希望大家能够明白啊,用起来的时候别出错了啊好,这是我们的这个,接下来我们再给大家说一个,来把这个做掉,做掉以后我写上一个叫link的list link的list,好,写上一个它new link啊list。
03:28
行了,写完了以后,我把这个改成我们的一就可以了,然后呢,我们现在直接来取list一点,我们叫get first,然后呢,我们直接打印,打印以后你会发现有问题,为什么?因为我们first表述的是我的第一个值,但是我们根本就没有第一个值,对不对,所以说跟这个感觉是不是非常类似呀,好像索引不对吧,所以我们运行一下它还是会报错,但是报的错误不是索引的问题,他报的错误叫no such element exception,什么意思啊,没有这样的一个元素啊,所以呢,我们把这个呢给它放过来。
04:05
同学们我相信啊,这个大家是能够明白的,这个我说过了,类似于咱们的那个索引的访问,但是呢,这个错误信息呢,他又不是这个意思,这个倒无所谓了,大家明白它为什么报这个错误就行了,如果呢,现在呢,你的LIST1我们点一下咱们增加,你增加以后给它一个A,这不就可以了吗?所以说你运行之后诶就可以啊。没有问题,对不对,哎,就是这个意思了,好了,这是我们的这个叫link的例思的,我们再给大家去说一个咱们的那个哈希map,其实啊,这个咱们之前给大家演示过,我们等于叫做new哈希map,什么意思啊,我往哈希map里面我们放数据呀,我的map点我们的put,我写上一个A,写上一个一,然后呢,我们放过来,我再写上它,我们写上一个C,写上一个B,然后呢,写上二和我们的三就可以了,这个时候呢,我循环便利干嘛呀,我们把我们当前的每个值我遍历一下,所以第二我们叫key set。
05:00
然后for循环,你for循环以后,这个时候我判断一下。如果我们当前的key啊,它等于点equals我们的O,那就说明我们给它来删掉map,点我们叫remove,把咱们当前的这个O给它删掉就可以了,你这么写完了以后,然后呢,我们打印当前的这个值叫map.get我们写上一个O好了,你这么运行以后肯定是不对的,我们运行一下看结果,运行之后大家就会发现我们当前是肯定会报错的,为什么?很简单,是因为啊,我们再去变历的过程当中,我们把集合的元素做了修改,那么它的底层就会导致它冲突。为什么呀,因为你改的时候你没告诉他对吧,你把我们当前的数据引用给我拿到了之后,可是你数据却变了,对不对,你变了以后我不知道,那我还循环呢,可是我就循环不到了,不就是这个意思吗?所以啊,咱们在当前情况下就会有冲突,所以咱们这里说一下。
06:00
我们哈希map一旦循环。变历史。那么如果修改啊,如果修改数据就会发生错误,我们这里的删除我们说会发生错误,那么如果我们写个put,会不会写个put,然后呢,把它改成我们的是可不可以呢?同学们来我们运行一下,运行运行以后看结果,你会发现我们当前的这个操作就没有任何问题,但是你删除就会有问题,诶老师,为什么呀,因为当前我们的数量发生了改变。什么意思啊,大家看一下,如果我加上一个D呢。对吧?ABCDA我们运行一下,运行以后看结果,你看看我们这里会不会出现问题,还是会出现的,也就意味着同学们如果你修改没问题,但是你增加和删除其实都是有问题的,这个大家能不能明白?记住我们讲过了,我们哈希map在循环去做处理的时候,我们尽量采用什么迭代器,不要对map直接做处理,在我们对map集合做便利的时候,不要对它做任何的操作,否则就会出现这样的问题,我们把集合中经常容易出现的一些问题给大家总结一下就行了。
我来说两句