【问题标题】:How to use super class iterator() in the listIterator() implementation?如何在 listIterator() 实现中使用超类 iterator()?
【发布时间】:2015-03-11 16:51:44
【问题描述】:

我有两个类:MyArrayCollection,它实现了 Collection,以及 MyArrayList,它扩展了 MyArrayCollection 并实现了 List。第一个有迭代器()。如何在第二类的 listIterator() 实现中使用它?我的丑陋尝试:

class MyArrayCollection implements Collection<Integer> {
    ...
    class CIterator implements Iterator<Integer> {
        @Override
        public boolean hasNext() {
            return pos < size;
        }

        @Override
        public Integer next() {
            return array[++pos];
        }
    }

    @Override
    public Iterator<Integer> iterator() {
        return new CIterator();
    }
    ...
}

class MyArrayList extends MyArrayCollection implements List<Integer> {
    ...
    class CListIterator extends CIterator implements ListIterator<Integer> {
        ...
    }

    @Override
    public ListIterator<Integer> listIterator() {
        return new CListIterator();
    }
    ...
}

【问题讨论】:

  • 所以如果我正确理解你的问题,你想在 listIterator 方法中返回 CIterator 但你不能?

标签: java iterator implementation extending listiterator


【解决方案1】:

我不确定我是否理解您的问题,但我猜您想使用从iterator() 方法获取的Iterator&lt;Integer&gt; 实例。当然可以,例如:

class CListIterator extends CIterator implements ListIterator<Integer>
{
  private final Iterator<Integer> iterator;
  public CListIterator() {
    super();
    this.iterator = iterator();
  }

  ...
}

然后您可以使用该迭代器实例实现来自ListInteger 的方法。但问题是您需要实现这些功能:

  • 向后迭代
  • 随时获取索引
  • 随时添加新值
  • 此时设置一个新值

迭代器实例可能不会对您有太大帮助。例如ArrayList.listIterator 迭代器根本不使用ArrayList.iterator

【讨论】:

    猜你喜欢
    • 2017-11-14
    • 1970-01-01
    • 2011-04-12
    • 2013-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-26
    • 1970-01-01
    相关资源
    最近更新 更多