java 迭代器(使用迭代器迭代循环集合元素,删除元素)

迭代器中的方法:

hasNext()----判断是否有元素,如果有元素可以迭代,返回true,则返回false
next()----- 返回迭代的下一个元素

迭代循环集合元素

获取的迭代器对象,迭代器用来遍历集合,此时相当于对当前集合的状态拍了一个快照,只有再次调用迭代器时,快照才会更新

第一步:获取集合对象的迭代器对象

Collection al=new ArrayList();  创建一个集合
al.add(20);
al.add("asd");
al.add(100);

Iterator it=al.iterator();  获取迭代器对象

第二步:通过获取的迭代器对象开始遍历集合

通过hasNext()方法判断是否有元素,在通过next()获取当前地址元素

while(it.hasNext()){
	Object oj=it.next();
	System.out.println(oj);
}

注意:
存到集合中是什么类型,取出来还是什么类型。 只不过在输出的时候会转换成字符串。因为这里println会调用tostring()方法。

在这里插入图片描述

迭代器删除元素

例:
List l=new ArrayList();
l.add(1);
l.add(2);
Iterator it=l.iterator();
while(it.hasNext()){
	Integer i=it.next();
	l.remove(i);
}
结果:
异常: java.util.ConcurrentModificationException

原因分析: 删除元秦之后,集合的结构发生了变化,应该重新去获取迭代器。但是,循环下一次的时候并没有重新获取迭代器,所以会出现异常:
java.util.ConcurrentModificationExce出异常根本原因是:集合中元素删除了,但是没有更新迭代器(迭代器不知道集合变化了),l.remove(o)直接通过集合去删除元素,没有通知迭代器。(导致迭代器的快照和原集合状态不同。)

删除方法修改:
(迭代器删除)

while(it.hasNext()){
	Integer i=it.next();
	it.remove(i);
}

迭代器去删除时,会自动更新迭代器,并且更新集合(删除集合中的元素)。it2.remove(),删除的一定是迭代器指向的当前元素。

结论:

  • 集合结构只要发生改变,迭代器必须重新获取。
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值