java 迭代器Iterator
程序员文章站
2022-03-30 21:20:17
迭代器(Iterator)是一个对象,它的工作是遍历并选择序列中的对象,它提供了一种访问一个容器(container)对象中的各个元素,而不必暴露该对象内部细节的方法。通过迭代器,开发人员不需要了解容器底层的结构,就可以实现对容器的遍历。 由于创建迭代器的代价小,因此迭代器通常被称为轻量级的容器。 ......
迭代器(iterator)是一个对象,它的工作是遍历并选择序列中的对象,它提供了一种访问一个容器(container)对象中的各个元素,而不必暴露该对象内部细节的方法。通过迭代器,开发人员不需要了解容器底层的结构,就可以实现对容器的遍历。
由于创建迭代器的代价小,因此迭代器通常被称为轻量级的容器。
iterator接口也是java集合框架的成员,但它与collection系列、map系列的集合不一样:collection和map一系列集合主要用于存储其它对象,而iterator主要用于遍历(迭代访问)collection集合中的元素。
iterator接口里定义了如下4个方法:
1)boolean hasnext():如果被迭代的集合元素还没有被遍历完,则返回true。
2)object next():返回集合里的下一个元素。
3)void remove():删除集合里上一次next方法返回的元素。
4)void foreachremaining(consumer action),这是java8为iterator新增的默认方法,该方法可使用lambda表达式来遍历集合元素。
下面程序示范了通过iterator接口来遍历集合元素。
public class iteratortest{ public static void main(string[] args){ list<string> strlist = new arraylist<>(); strlist.add("111"); strlist.add("222"); strlist.add("333"); iterator it = strlist.iterator(); while(it.hasnext()){ string str = (string)it.next(); sysye.out.println(str); if(str.equals("222")){ it.remove(); } //对str赋值,不会改变集合本身 str = "000"; } } }
当使用iterator迭代访问collection集合元素时,collection集合里的元素不能被改变,只有通过iterator 的remove()方法删除上一次next()方法返回的集合元素才可以;否则将会引发java.util.concurrentmodificationexception异常。
欢迎关注微信公众号【java典籍】,收看更多java技术干货!
▼微信扫一扫下图↓↓↓二维码关注
引申:iterator 与listiterator 有何区别?
iterator 只能正向遍历集合,适用于获取移除元素。listiterator 继承自iterator ,专门针对list,可以从两个方向来遍历list,同时支持元素的修改。