【问题标题】:ArrayList Iterator fails to iterateArrayList 迭代器无法迭代
【发布时间】:2016-08-23 16:34:51
【问题描述】:

我编写的迭代器没有按计划进行迭代。它应该迭代一个 ArrayList 但它会继续循环第一个项目:aylmao

目标是有一个有效的自定义迭代器,它将迭代一个通用的 ArrayList

我很想在聊天中问这个问题,但那里没有人。

这是导致代码的问题:


    @Override
public Iterator<T> iterator() {
    final SimpleList<T> list = this;

    return new Iterator<T>() {

        int index = 0;

        @Override
        public boolean hasNext() {
            return index < list.size() && list.get(index) != null;
        }

        @Override
        public T next() {
            T temp = list.get(index++);
            index++;
            return temp;
        }

        public void remove() {
            throw new UnsupportedOperationException();
        }
    };

}

public static void main(String[] args) {
    SimpleList<String> list = new SimpleList<String>();
    list.append("aylmao");
    list.append("1aylmao");
    list.append("2aylmao");
    list.append("3aylmao");
    list.append("4aylmao");
    list.append("5aylmao");
    list.append("6aylmao");

    while (list.iterator().hasNext()) {

        System.out.println(list.iterator().next());
    }
}

【问题讨论】:

  • 为什么要增加两次索引?
  • 一个返回下一项,一个将索引向前移动一个位置
  • 您不需要这样做,您想返回当前索引处的内容,然后增加索引。只做 return list.get(index++);
  • 自己注意到了,谢谢建议,问题已得到解答。你们摇滚
  • 很高兴我们能帮上忙,干杯

标签: java arraylist data-structures iterator


【解决方案1】:

调用 list.iterator() 每次都会创建一个新的迭代器。

Iterator&lt;String&gt; iter = list.iterator() 会解决你的问题

只需重复使用 iter。

例如:

SimpleList<String> list = new SimpleList<String>();
    list.append("aylmao");
    list.append("1aylmao");
    list.append("2aylmao");
    list.append("3aylmao");
    list.append("4aylmao");
    list.append("5aylmao");
    list.append("6aylmao");
    Iterator<String> iter = list.iterator()
    while (iter.hasNext()) {

        System.out.println(iter.next());
    }

【讨论】:

  • 我会尝试一下,一旦成功,我会标记你的答案,谢谢
  • 查看@zython 的编辑,打印也需要使用该变量
【解决方案2】:

将迭代器分配给变量,然后将其添加到while循环。 list.iterator();每次都创建一个新的迭代器。

Iterator iter = list.iterator();
while(iter.hasNext())
{
   System.out.println(iter.next());
}

【讨论】:

    【解决方案3】:

    使用:

    for (Iterator<String> iterator = list.iterator(); iterator.hasNext();) 
    {
       System.out.println(iterator.next());
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-26
      • 2012-04-29
      • 2022-10-15
      • 2012-11-30
      • 2021-11-16
      • 2017-10-18
      • 1970-01-01
      • 2020-01-03
      相关资源
      最近更新 更多