集合常用的3种遍历方式

 我来答
科创17
2022-06-17 · TA获得超过5919个赞
知道小有建树答主
回答量:2846
采纳率:100%
帮助的人:177万
展开全部

1 迭代器 Iterator

运行结果

说明上面例子中for和while不能使用同一个iterator对象,因为在while循环中iterator已经返回最后一个元素,指针指向的下一个元素为空了,即hasNext()返回值为false,不能用该迭代器的hasNext()作为for循环的判断条件。

2 转换为Object[]进行遍历

运行结果

3 使用增强for(foreach)实现遍历

运行结果

`注意·
增强for有个缺点,如果集合或者数组为null,会报空指针异常(NullPointerException),在调用增强for时最好先做判断。通过反编译可以看到增强for是用iterator的for循环实现的,是iterator的替代,iterator也有这种空指针异常的问题。

4说明

运行结果,集合元素内容不变

*4.2 并行修改异常ConcurrentModificationException
4.2.1 迭代器和foreach(增强for)遍历的循环中,不能出现集合对象本身调用方法更改集合内容,否则运行会报错 java.util.ConcurrentModificationException(并修改异常)
原因是--迭代器和foreach都是依赖集合而存在的,如果集合更改了,迭代器和增强for都不知道,所以就报并行修改异常。

运行结果

4.2.2 解决办法
A 使用普通for循环,在循环中根据判断集合对内容进行修改
B 使用迭代器对集合内容进行修改,Iterator接口中没有该方法,它的子类ListIterator接口中提供add()
详情请参考: https://www.jianshu.com/p/94b12cceb6c7 中(二、3.3)
4.3 一个集合对象的迭代器循环中多次使用next(),会出现java.util.NoSuchElementException异常。

运行结果

4.4 迭代器的remove()能删除next()返回的元素,这也算是更改了集合的内容,不能用元素的值在进行迭代进行解释,遗留

运行结果

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式