如何在listIterator()实现中使用超类iterator()?

时间:2015-03-11 16:51:44

标签: java iterator implementation extending listiterator

我有两个类:MyArrayCollection,它实现了Collection,以及MyArrayList,它扩展了MyArrayCollection并实现了List。第一个有iterator()。如何在第二个类的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();
    }
    ...
}

1 个答案:

答案 0 :(得分:0)

我不确定我是否理解您的问题,但我想您想使用从Iterator<Integer>方法获取的iterator()实例。当然,你可以这样做:

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

  ...
}

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

  • 向后迭代
  • 随时获取索引
  • 随时添加新值
  • 在该点设置新值

迭代器实例在那里可能不会帮到你很多。例如,ArrayList.listIterator迭代器根本不使用ArrayList.iterator