美文网首页
Iterable(迭代器接口)

Iterable(迭代器接口)

作者: smallAttr | 来源:发表于2018-01-26 18:29 被阅读0次

Iterable:可以说是站在集合框架最顶端的接口,实现集合的遍历。

最后才发现,这个接口里面要说的太少啦。好吧,我们重点就说说Iterator

Iterator:

方法就不在赘述,通过一个实际的例子来说明吧:

场景:我们需要在不新建对象的情况下,从源List删除指定的数据,最后打印出来:

其实从这个问题本身出发并不难,难就在于你从一开始就轻视它,最后结果就说明一切啦。也不卖什么关子啦,直接进入正题:

错误事例:

List sourceList = new ArrayList<>(Arrays.asList("a", "b", "a", "c", "d"));

for (int i = 0; i < sourceList.size(); i++) {

if (sourceList.get(i).equals("a")) {

sourceList.remove(sourceList.get(i));}

}

sourceList.forEach(System.out::println);

看结果简直perfect,但是确实暗中埋着深坑。当我发现第一个待移除元素的时候,从list移除掉,list.size发生变化,元素的索引也在变化。比如你循环到第2个元素的时候你把它删了,接下来你去访问第3个元素,实际上访问到的是原先的第4个元素。

解决方案1:

人为的维护下标,就能达到想要的效果。

List sourceList = new ArrayList<>(Arrays.asList("a", "a", "b", "a", "a", "a", "c", "d"));

for (int i = 0; i < sourceList.size(); i++) {

if (sourceList.get(i).equals("a")) {

sourceList.remove(sourceList.get(i));

i--; }

}

sourceList.forEach(System.out::print);

解决方案2:

这种方式就是借助迭代器实现List的动态删减。

⚠️:一定是Iterator的remove方法,还必须在next()方法后面使用,请看原文注释:

This method can be called only once per call to {@link #next}

关于具体实现,后续文章会具体说明

List sourceList = new ArrayList<>(Arrays.asList("a", "b", "a", "c", "d"));

Iterator iterator = sourceList.iterator();

while (iterator.hasNext()) {

String next = iterator.next();

if (next.equals("a")) {

iterator.remove(); }

}

sourceList.iterator().forEachRemaining(System.out::println);

哈哈,突然发现这个例子把Iterator的所有方法用上了,也算是碰巧吧。

相关文章

  • java 集合类

    * Iterable 迭代器接口,是Collection类的父接口。 实现这个Iterable接口的对象允许使用f...

  • Iterable(迭代器接口)

    Iterable:可以说是站在集合框架最顶端的接口,实现集合的遍历。 最后才发现,这个接口里面要说的太少啦。好吧,...

  • 关于java中集合的知识点总结

    1. Interface Iterable 迭代器接口,这是Collection类的父接口。实现这个Iterabl...

  • javascript高级程序设计8

    第七章 迭代器和生成器 一.迭代器(循环是迭代器的基础)1.1 很多内置类型都实现了Iterable接口(满...

  • java.util Collection相关类解读

    Collection的超级父接口为Iterable可迭代的,需要实现返回迭代器,那么for(:)语句就能使用...

  • 8.for of

    for of 使用实例 可以遍历可迭代对象,可迭代对象就是部署了迭代器接口 iterable,很多内置的数据结构提...

  • Java_集合特点

    Collection 是下面集合的父接口,有自己的方法等 是继承与Iterable接口的 有迭代器 ◆~|--...

  • ArrayList源码分析

    interface Iterable : //实现此接口使集合对象可以通过迭代器遍历自身元素 Iterator...

  • Java基础之Iterable接口

    说明: Iterable接口是Java集合框架的顶级接口,实现此接口使集合对象可以通过迭代器遍历自身元素。 源码:...

  • 迭代器与生成器

    迭代(iteration)与可迭代(iterable) 迭代器 迭代器协议(iterator protocol) ...

网友评论

      本文标题:Iterable(迭代器接口)

      本文链接:https://www.haomeiwen.com/subject/yyaiaxtx.html