无法在Java中实现ArrayList Iterator

时间:2015-04-07 16:10:45

标签: java arraylist

这是我iteratorArrayList的实施:

public class MyClass {

    List<E> list = new ArraList<E>();

public Iterator<E> iterator() {

        return new MyIterator<E>();
    }

private class MyIterator<T> implements Iterator<E> {

     int index;

        public MyIterator() {

            index = 0;

        }

        public E next() {

            if (hasNext()){
            index++;
            return list.get(index + 1);
        }

        else
            throw new NoSuchElementException();
        }

        public boolean hasNext() {

        if ((list.get(index + 1) != null) && (index < list.size() -1)){
                index++;
                return true;
            }
            else
                return false;
        }

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

    }

}

然而,虽然逻辑看起来不错,但这种实现是错误的,因为它无法正常工作。

我的问题是:我做错了什么,我怎样才能改变它以使其正常工作?

更新:

public E next() {

        if (index == 0) {
            index++;
            return list.get(0);
        }

        else if (hasNext()) {
            index++;
            return list.get(index);
        }

        else
            throw new NoSuchElementException();
    }

我设法以某种方式使其工作,但现在下一个方法是跳过数组的索引。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

如果没有您如何使用此迭代器的示例,很难给您建议。话虽如此,至少有两件事你做错了。在next()方法中,您有

index++;
return list.get(index + 1);

因此,您将首先递增索引,然后返回NEXT索引。这应该导致越界异常。将其更改为返回list.get(index);

其次,您的hasNext()方法未正确排序。也就是说,在检查下一个对象是否存在之前,应检查下一个索引是否有效。将您的if语句重新排序为:

if ((index < list.size() -1) && (list.get(index + 1) != null))

同时摆脱index++;中的hasNext()行。该方法应该只检查有效性,而不是实际更改当前索引。这应该发生在next()